Создайте свой собственный облачный эмулятор

В данной статье описывается , как запустить эмулятор AAOS в качестве веб - службы и запустить его в веб - браузере , чтобы сделать его удаленно доступным для пользователей. Это обеспечивает конца в конец, минимально жизнеспособный ссылку через Google Cloud Compute Engine . Тем не менее, вы можете использовать эту услугу на любой общедоступной или частной облачной платформе по вашему выбору.

Цель

Эта централизованная конфигурация и настройка делают эмулятор AAOS доступным для всей компании, поставщика и разработчиков, работающих на дому. Это повышает эффективность управления эмулятором AAOS и его обновления до новых версий, а также сокращает время, необходимое для настройки и управления локальными машинами для отдельных пользователей. Это решение оптимизирует использование аппаратных ресурсов и обеспечивает более дешевую среду разработки приложений. Например, в целях:

  • Исследование пользователей, обзор пользовательского опыта, поддержка клиентов и обучение.
  • Демонстрации для потенциальных клиентов и в каналах продаж.
  • Тестируйте, проверяйте и даже отлаживайте приложения (включая ежедневные сборки OEM HMI) в любом масштабе. Считайте эмулятор заменой тестовых стендов, используемых для разработки приложений.
  • Агенты центра обработки вызовов OEM-клиентов имеют унифицированный и удобный пользовательский интерфейс HU.

Преимущества использования эмулятора AAOS многочисленны:

  • Используйте сценарий установки, чтобы создать настроенный облачный эмулятор AAOS (облачный эмулятор).
  • Создайте настроенный образ облачного эмулятора AAOS для экземпляров ВМ:
    • Готовая настройка облачного эмулятора.
    • Общедоступные образы AAOS AVD, доступные создателю службы для запуска AAOS AVD с помощью команды. Например, общедоступные образы OEM AVD в качестве образцов для адаптации и применения партнерами.

Архитектура

Архитектура примера облачного эмулятора показана ниже. Ваш первый минимально жизнеспособный сервис будет работать, добавляя собственные образы OEM AVD.

Архитектура Рисунок 1. Облако АВД

Основные строительные блоки эмулятора:

Пункт Цель
Эмулятор Android Экземпляр эмулятора содержит образы AVD
Мост Goldfish-webrtc Приложение Linux для обеспечения связи между реагирующим приложением и эмулятором AAOS.
Android-эмулятор-webrtc Реагировать приложение для отображения эмулятора пользовательского интерфейса в веб - браузере. React также фиксирует события пользовательского ввода и отправляет их обратно на сервер.
Скрипты контейнера эмулятора Android Скрипты Python для управления и создания образов и контейнеров Docker для вышеуказанных программных модулей.
Служба JWT (служба веб-токенов JSON) Создает токены для управления правами доступа эмулятора.
Включите сервер Устанавливает прямое соединение WebRTC между клиентом и сервером. Turn server требуется только тогда, когда служба эмулятора работает за брандмауэрами или прокси-серверами.
посланник

Прокси-сервис для:

  • Обеспечьте HTTPS с помощью самозаверяющего сертификата.
  • Перенаправить трафик с порта 80 (http) на порт 443 (https).
  • Действуйте как прокси-сервер gRPC для эмулятора.
  • Проверьте токены, чтобы разрешить доступ к конечной точке эмулятора gRPC.
  • Перенаправляйте другие запросы к компоненту Nginx, в котором размещено приложение React.

Настройте эмулятор на облачной виртуальной машине

Чтобы создать проект GCP:

  1. Перейти к Google Cloud Console и выберите проект .
  2. Для того, чтобы подтвердить , что биллинг включен для Вашего проекта Google Cloud см Включение, отключение или изменение биллинг для проекта .
  3. Включить API .

Создайте виртуальную машину Linux в GCE

1. Включите вложенную виртуализацию

По умолчанию вложенная виртуализация разрешена на уровне проекта, папки или организации. Если кто - то в вашей организации не имеет инвалидов вложенной виртуализации , вам не нужно ничего , чтобы позволить ей сделать.

  1. Используйте инструмент gcloud командной строки , чтобы подтвердить , что вложенная виртуализация разрешена:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Создайте загрузочный диск Ubuntu-1804-lts.

  1. Перейти к Cloud Console .
  2. Выберите проект GCP.
  3. Перейдите в меню навигации > Compute Engine > Диски > Создать диск.
    1. Укажите имя диска. Например, ubuntu1804lts
    2. Выберите регион и зону. Для поддержки вложенной виртуализации убедитесь, что выбранные вами регион и зона поддерживают процессоры Haswell (или более поздних версий). Чтобы узнать больше, см Регионы и зоны .
    3. Выберите исходный образ ubuntu-1804-bionic-v20210211
    4. Установите соответствующий размер диска (рекомендуется 100 ГБ или больше).

Рисунок 1. Создание загрузочного диска Ubuntu

3. Создайте собственный образ со специальным лицензионным ключом для включения VMX.

  1. Перейти к Cloud Console .
  2. Открыть облако консоли и используйте команду следующей:
    gcloud compute images create [IMAGE NAME] --source-disk-zone [DISK ZONE] --source-disk [DISK NAME] \
      --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    
    • Введите имя изображения. Например, aaos-emulator-image
    • Задайте Disk Zone для зоны, в которой вы создали диск.
    • Установите имя диска на имя, которое вы использовали для создания диска.

    Например:

    gcloud compute images create aaos-emulator-image --source-disk-zone us-central1-a \
        --source-disk ubuntu1804lts \
        --licenses \
        "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    

Для получения дополнительной информации см вложенной виртуализации VM Instance .

4. Создайте экземпляр виртуальной машины, используя настроенный образ.

  1. Перейти к Cloud Console .
  2. Выберите проект GCP.
  3. Перейдите в Меню навигации > Compute Engine > Экземпляр виртуальной машины.

    Рисунок 1. Создание экземпляра виртуальной машины

  4. Введите имя экземпляра. Например, aaosemulator
  5. Выберите нужное семейство машин и тип. Убедитесь, что машина содержит четыре виртуальных ЦП и 16 ГБ памяти (или больше).
  6. Выберите платформу ЦП Intel Cascade Lake (или более позднюю).
  7. Измените загрузочный диск на образ, созданный на предыдущем шаге.
  8. Включить брандмауэр для:
    • Разрешить HTTP-трафик
    • Разрешить HTTPS-трафик

5. Настройте брандмауэр для открытия портов 80 и 443.

  1. Перейти к Cloud Console .
  2. выберите проект GCP.
  3. Перейдите в Меню навигации > Compute Engine > Экземпляр ВМ > Настроить правило брандмауэра.

Установите необходимое программное обеспечение на виртуальную машину

  1. Установите Python 3 и Python3-ENV:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Установка Android SDK и ADB доступны на пути.
    sudo apt install android-sdk
    

    Для того, чтобы установить Докер и Докер-Compose см Докер и Докер-Compose . Убедитесь , что вы можете запустить их в качестве внекорневой пользователя .

  3. Для подтверждения аппаратной виртуализации поддерживает процессор (команда должна привести к ненулевое число):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Установите виртуальную машину ядра (KVM). Для того, чтобы установить KVM, запустите:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. Для проверки KVM работает:
    sudo apt install cpu-checker
    kvm-ok
    
    Вывод должен быть:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. Для того, чтобы установить Node.js и узел Packet Manager (НПМ):
    sudo apt install nodejs npm
    

Запустите размещенные контейнеры

  1. Чтобы проверить установку, запустите размещенные контейнеры эмулятора Android из общедоступного репозитория. Вы можете найти подробную информацию о контейнерах здесь . Теперь вы можете запускать эти контейнеры, не создавая их. Например:
    docker run \
      -e ADBKEY="$(cat ~/.android/adbkey)" \
      --device /dev/kvm \
      --publish 8554:8554/tcp \
      --publish 5555:5555/tcp  \
      us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
    

    Это вытаскивает контейнер (если он недоступен локально) и запускает его.

  2. Когда контейнер запущен, подключитесь к устройству, настроив ADB так же, как подключите AVD на локальном хосте. Например:
    adb connect localhost:5555
    adb devices
    
    Вывод должен быть:
    List of devices attached
    localhost:5555 device
    

Настройте службу эмулятора AAOS

Чтобы настроить службу эмулятора:

  1. Установите контейнер скрипт Android Emulator Docker:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. Это активирует виртуальную среду и делает доступным исполняемый файл emu-docker. Чтобы получить подробную информацию о его использовании, запустите его:
    emu-docker -h
    
  3. Чтобы создать контейнеры Docker, примите лицензионные соглашения.
  4. Создайте контейнер Docker эмулятора AAOS.
  5. Скачать эмулятор сборки позже , чем версия 7154743. Например:
    sdk-repo-linux-emulator-7154743.zip
    
  6. Загрузите образ системы эмулятора AAOS. Например, sdk-repo-linux-system-images-7115454.zip :
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Создайте веб-контейнеры и задайте имя пользователя и пароль для удаленного доступа.
    ./create_web_container.sh -p user1,passwd1
    
  8. Запустите AAOS Эмулятор веб - службы:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

Вы успешно запустили веб-службу эмулятора AAOS! Используйте следующее, чтобы получить к нему доступ в веб-браузере:

https://<VM_External__IP>

Исправление проблем

Если возникает ошибка подключения к VM внешнего IP, убедитесь , что виртуальная машина настроена , чтобы как HTTP и HTTPS трафик. Чтобы проверить это, см Запуск базового веб - сервера Apache .

Настроить поворотный сервер

Вы всегда можете использовать свой собственный сервер поворота. Ниже приведен пример экземпляра виртуальной машины Google Cloud.

Примечание: Для того, чтобы сделать работу поворот сервера на экземпляре Google Cloud VM, убедитесь , что для настройки VM правила брандмауэра , чтобы разрешить трафик на TCP и UDP порты 3478 и 3479.

  1. Установите сервер coturn:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. Изменение /etc/turnserver.conf , добавив следующие строки:
    lt-cred-mech
    #set your realm name
    realm=test
    #coturn username and password
    user=test:test123
    # external-ip=<VM-Public-IP>/<VM-Private-IP>
    external-ip=34.193.52.134/10.128.0.2
    
    systemctl start coturn
    
  3. Измените файл Docker Compose YAML включить конфигурацию TURN:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. Добавьте следующие две строки среды в разделе эмулятора:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. Перезапустите службу эмулятора AAOS с конфигурацией поворота. Обязательно замените очередь сервера IP, имя пользователя и учетные данные ниже с вашим собственным:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up