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

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

Цель

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

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

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

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

Архитектура

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

Рисунок 1. Архитектура Cloud AVD

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

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

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

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

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

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

  1. Перейдите в облачную консоль .
  2. Откройте Cloud Shell и используйте следующую команду:
    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
    • В качестве зоны диска укажите зону, в которой вы создали диск.
    • В качестве имени диска задайте имя, которое вы использовали для создания диска.

    Например:

    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"
    

Дополнительные сведения см. в разделе «Экземпляр вложенной виртуальной машины виртуализации» .

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

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

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

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

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

  1. Перейдите в облачную консоль .
  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
    

    Чтобы установить Docker и Docker-compose, см. Docker и Docker-compose . Убедитесь, что вы можете запустить их от имени пользователя без полномочий root .

  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 и Node Packet Manager (NPM):
    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. Установите скрипт-контейнер Docker эмулятора Android:
    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>

Поиск неисправностей

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

Настройка сервера поворотов

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

Примечание. Чтобы сервер Turn работал на экземпляре виртуальной машины Google Cloud, обязательно настройте правило брандмауэра виртуальной машины, разрешающее трафик через порты 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. Измените YAML-файл Docker Compose, включив в него конфигурацию 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-адрес сервера Turn, имя пользователя и учетные данные ниже своими собственными:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up