Cómo compilar tu propio emulador de Cloud

En esta página, se describe cómo ejecutar AAOS Emulator como servicio web y cómo hacerlo en un navegador web para que los usuarios puedan acceder a él de forma remota. De este modo, se proporciona una solución integral referencia mínimamente viable a través del servicio de Compute Engine. Dicho esto, puedes usar este servicio en cualquier plataforma de nube pública o privada que elijas.

Propósito

Esta configuración y configuración centralizadas hacen que AAOS Emulator sea accesible para toda la empresa, proveedores de servicios en la nube y desarrolladores que trabajan desde casa. Esto hace que la administración y la actualización sean más eficientes. el Emulador de AAOS a versiones nuevas y elimina el tiempo necesario para configurar y administrar máquinas locales para usuarios individuales. Esta solución optimiza el uso de recursos de hardware y permite un un entorno de desarrollo de aplicaciones de menor costo. Estos son algunos ejemplos:

  • Investigación, revisión de la experiencia del usuario, asistencia al cliente y capacitación.
  • Demostraciones a clientes potenciales y canales de ventas
  • Prueba, valida e incluso depura apps (incluidas las compilaciones diarias de HMI de OEM) a gran escala. Reflexiona en el emulador como sustituto de los bancos de pruebas para desarrollar apps.
  • Los agentes del centro de atención telefónica de clientes de OEM tienen una IU de HU uniforme y de fácil acceso.

Los beneficios de usar el emulador AAOS son numerosos:

  • Usa una secuencia de comandos de configuración para crear un emulador de AAOS personalizado y basado en la nube (emulador de nube).
  • Compila una imagen de AAOS Cloud Emulator personalizada para instancias de VM:
    • Configuración lista de un emulador basado en la nube.
    • Las imágenes de AVD de AAOS públicas disponibles para que el creador del servicio inicie un AVD de AAOS con un comando. Por ejemplo, imágenes públicas de AVD de OEM como ejemplos para que los socios las adapten y las apliquen.

Arquitectura

A continuación, se ilustra la arquitectura del ejemplo del emulador de la nube. Tu primer un servicio mínimamente viable funcionará si agregas tus propias imágenes de AVD de OEM.

Figura 1: Arquitectura de AVD en Cloud.

Los componentes básicos clave del emulador son los siguientes:

aquí.
Artículo Propósito
Android Emulator La instancia del emulador aloja imágenes del AVD
Puente Goldfish-Webrtc App de Linux para proporcionar comunicación entre la app de React y el emulador de AAOS
android-emulator-webrtc App React para mostrar la IU del emulador en una Web navegador. React también captura los eventos de entrada del usuario y los envía de vuelta al servidor.
Secuencias de comandos del contenedor de Android Emulator Secuencias de comandos de Python para administrar y crear imágenes y contenedores de Docker para los módulos de software anteriores
Genera tokens para administrar los permisos de acceso del emulador.
Activar el servidor Establece una conexión directa de WebRTC entre el cliente y el servidor. Activar el servidor solo se requiere cuando el servicio de emulador se ejecuta detrás de firewalls o proxies.
Envoy

Un servicio de proxy para hacer lo siguiente:

  • Proporcionar HTTPS con un certificado autofirmado
  • Redirecciona el tráfico del puerto 80 (http) al puerto 443 (https).
  • Actúa como un proxy de gRPC para el emulador.
  • Verifica los tokens para permitir el acceso al extremo de gRPC del emulador.
  • Redireccionar otras solicitudes al componente Nginx, que aloja una app de React

Cómo configurar el emulador en una VM de la nube

Para crear un proyecto de GCP, sigue estos pasos:

  1. Ve a la consola de Google Cloud y Selecciona un proyecto.
  2. Para confirmar que la facturación está habilitada para tu proyecto de Google Cloud, consulta Habilita, inhabilita o cambia la facturación de un proyecto
  3. Habilita la API.

Crea una VM de Linux en GCE

1. Habilita la virtualización anidada

De forma predeterminada, la virtualización anidada se permite a nivel del proyecto, la organización o la carpeta. A menos que un miembro de tu organización haya inhabilitación de la virtualización anidada no debes hacer nada para habilitarla.

  1. Usa la herramienta de línea de comandos de gcloud para confirmar que se permita la virtualización anidada:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Crea un disco de arranque Ubuntu-1804-lts

  1. Ir a Consola de Cloud.
  2. Selecciona el proyecto de GCP.
  3. Ve al menú de navegación y selecciona Compute Engine > Discos > Crear disco.
    1. Proporciona un nombre de disco. Por ejemplo, ubuntu1804lts
    2. Selecciona una región y una zona. Para admitir la virtualización anidada, asegúrate de que el campo Región y la zona que selecciones admitirán procesadores Haswell (o versiones posteriores). Para obtener más información, consulta Regiones y zonas.
    3. Selecciona la imagen de origen de ubuntu-1804-bionic-v20210211
    4. Configura un tamaño de disco adecuado (se recomienda 100 GB o más).

Figura 2: Crea un disco de arranque de Ubuntu.

3. Crea una imagen personalizada con una clave de licencia especial para habilitar VMX

  1. Ve a la consola de Cloud.
  2. Abre Cloud Shell y usa el siguiente comando:
    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"
    
    • Ingresa un nombre para la imagen. Por ejemplo, aaos-emulator-image
    • Establece la zona del disco en la zona en la que creaste el disco.
    • Configura el nombre del disco como el que usaste para crearlo.

    Por ejemplo:

    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"
    

Para obtener más información, consulta Instancia de VM de virtualización anidada.

4. Crea una instancia de VM con la imagen personalizada

  1. Ve a la consola de Cloud.
  2. Selecciona el proyecto de GCP.
  3. Ve a Menú de navegación > Compute Engine > instancia de VM.

    Figura 3: Crear una instancia de VM

  4. Ingresa un nombre de instancia. Por ejemplo, aaosemulator
  5. Selecciona la familia y el tipo de máquina que desees. Asegúrate de que la máquina contenga cuatro CPU virtuales 16 GB de memoria (o más)
  6. Selecciona la plataforma de CPU para que sea Intel Cascade Lake (o una versión posterior).
  7. Cambia el disco de arranque a la imagen creada en el paso anterior.
  8. Habilitar firewall para:
    • Allow HTTP traffic
    • Allow HTTPS traffic

5. Configura el firewall para abrir los puertos 80 y 443

  1. Ve a la consola de Cloud.
  2. selecciona el proyecto de GCP.
  3. Ve a Menú de navegación > Compute Engine > Instancia de VM > Configura una regla de firewall.

Instala el software necesario en la VM

  1. Instala Python 3 y Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Instala el SDK de Android. y ADB disponible en la ruta.
    sudo apt install android-sdk
    

    Para instalar Docker y Docker-compose, consulta Docker y Docker-compose Asegúrate de que puedes ejecutar estos como el usuario no raíz.

  3. Para confirmar que la CPU admita la virtualización de hardware (el comando debería generar un número distinto de cero):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Instala la máquina virtual de kernel (KVM). Para instalar KVM, ejecuta el siguiente comando:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. Para verificar que KVM funciona, sigue estos pasos:
    sudo apt install cpu-checker
    kvm-ok
    
    El resultado debería ser el siguiente:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. Para instalar Node.js y el administrador de paquetes de Node (NPM), sigue estos pasos:
    sudo apt install nodejs npm
    

Inicia los contenedores alojados

  1. Para verificar la instalación, ejecuta los contenedores de Android Emulator alojados desde el público. en un repositorio de confianza. Puedes encontrar detalles sobre los contenedores aquí. Ahora puedes ejecutar estos contenedores sin compilarlos. Por ejemplo:
    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
    

    Esta acción abre el contenedor (si no está disponible de forma local) y lo inicia.

  2. Cuando se inicie el contenedor, conéctate al dispositivo configurando ADB de la misma manera. que conectar un AVD en un host local. Por ejemplo:
    adb connect localhost:5555
    adb devices
    
    El resultado debería ser el siguiente:
    List of devices attached
    localhost:5555 device
    

Cómo configurar el servicio AAOS Emulator

Para configurar el servicio del emulador, haz lo siguiente:

  1. Instala la secuencia de comandos del contenedor de Docker de Android Emulator:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. Esto activa un entorno virtual y pone a disposición el emu-docker ejecutable. Para obtener información detallada sobre su uso, iníciala:
    emu-docker -h
    
  3. Para crear los contenedores de Docker, acepta los contratos de licencia.
  4. Compila el contenedor de Docker del emulador de AAOS.
  5. Descarga una compilación del emulador posterior a la versión 7154743. Por ejemplo:
    sdk-repo-linux-emulator-7154743.zip
    
  6. Descarga la imagen del sistema para el emulador de AAOS. Por ejemplo: sdk-repo-linux-system-images-7115454.zip:
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Crear los contenedores web y configurar el nombre de usuario y la contraseña para el acceso remoto
    ./create_web_container.sh -p user1,passwd1
    
  8. Inicia el servicio web del emulador de AAOS:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

Iniciaste correctamente un servicio web emulador de AAOS. Usa lo siguiente para acceder en un navegador web:

https://<VM_External__IP>

Solución de problemas

Si se produce un error de conexión a la IP externa de la VM, asegúrate de que la VM esté configurada para permitir el tráfico HTTP y el HTTPS. Para validarlo, consulta Ejecuta un Apache Web Server básico.

Configura el servidor de turnos

Siempre puedes usar tu propio servidor de turnos. A continuación, se proporciona una muestra de una VM de Google Cloud instancia.

Nota: Para que el servidor de turnos funcione en una instancia de VM de Google Cloud, asegúrate de configurar la regla de firewall de la VM para permitir el tráfico en los puertos TCP y UDP 3478 y 3479.

  1. Instala el servidor de coturn:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. Agrega las siguientes líneas para modificar /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. Modifica el archivo YAML de Docker Compose para incluir la configuración TURN:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. Agrega las siguientes dos líneas de entorno en la sección del emulador:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. Reinicia el servicio del emulador de AAOS con la configuración de giro. Asegúrate de reemplazar la IP, el nombre de usuario y la credencial del servidor de turno que aparecen a continuación por los tuyos:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up