Crea il tuo emulatore cloud

In questa pagina viene descritto come eseguire AAOS Emulator come servizio web e in un browser web per renderlo accessibile agli utenti da remoto. In questo modo, viene fornito un riferimento minimo viable end-to-end tramite Compute Engine di Google Cloud. Detto questo, puoi utilizzare questo servizio su qualsiasi piattaforma cloud pubblica o privata che preferisci.

Finalità

Questa configurazione e impostazione centralizzata rende AAOS Emulator accessibile a un'intera azienda, a fornitori e a sviluppatori che lavorano da casa. In questo modo, la gestione e l'upgrade dell'emulatore AAOS alle nuove versioni diventano più efficienti ed eliminano il tempo necessario per configurare e gestire le macchine locali per i singoli utenti. Questa soluzione ottimizza l'utilizzo delle risorse hardware e consente un ambiente di sviluppo di app a costi inferiori. Ad esempio, ai fini di:

  • Ricerca sugli utenti, revisione dell'esperienza utente, assistenza clienti e formazione.
  • Demo a potenziali clienti e nei canali di vendita.
  • Testare, convalidare e persino eseguire il debug delle app (incluse le build HMI giornaliere OEM) su larga scala. Considera l'emulatore un sostituto delle piattaforme di test utilizzate per sviluppare app.
  • Gli agenti del call center dei clienti OEM hanno un'interfaccia utente dell'hub di assistenza uniforme e di facile accesso.

L'utilizzo dell'emulatore AAOS presenta numerosi vantaggi:

  • Utilizza uno script di configurazione per creare un emulatore AAOS personalizzato e basato su cloud. (emulatore cloud).
  • Crea un'immagine di AAOS Cloud Emulator personalizzata per le istanze VM:
    • Configurazione pronta di un emulatore basato su cloud.
    • Immagini AVD AAOS pubbliche disponibili per il creator del servizio per avviare un AVD AAOS con un comando. Ad esempio, immagini AVD OEM pubbliche come esempi che i partner possono adattare e applicare.

Architettura

L'architettura dell'esempio di emulatore cloud è illustrata di seguito. Il tuo primo servizio minimamente fattibile funzionerà aggiungendo le tue immagini AVD OEM.

Figura 1. Architettura AVD cloud.

I componenti di base dell'emulatore sono:

qui.
Articolo Finalità
Emulatore Android L'istanza dell'emulatore ospita le immagini AVD
Goldfish-webrtc bridge App Linux per fornire la comunicazione tra l'app React e l'emulatore AAOS
android-emulator-webrtc App React per visualizzare l'interfaccia utente dell'emulatore in un browser web. React acquisisce anche gli eventi di input utente e li invia nuovamente al server.
Script del contenitore dell'emulatore Android Script Python per gestire e creare immagini e container Docker per i moduli software sopra indicati.
Genera token per gestire le autorizzazioni di accesso dell'emulatore.
Attiva il server Stabilisce una connessione diretta WebRTC tra il client e il server. Il server di rotazione è necessario solo quando il servizio Emulator è in esecuzione dietro firewall o proxy.
Envoy

Un servizio proxy per:

  • Fornisci HTTPS utilizzando un certificato autofirmato.
  • Reindirizza il traffico sulla porta 80 (http) alla porta 443 (https).
  • Agisce come proxy gRPC per l'emulatore.
  • Verifica i token per consentire l'accesso all'endpoint gRPC dell'emulatore.
  • Reindirizza le altre richieste al componente Nginx, che ospita un'app React.

Configurare l'emulatore su una VM cloud

Per creare un progetto Google Cloud:

  1. Vai alla console Google Cloud e seleziona un progetto.
  2. Per verificare che la fatturazione sia attivata per il tuo progetto Google Cloud, consulta Attivare, disattivare o modificare la fatturazione per un progetto .
  3. Attiva l'API.

Creare una VM Linux in GCE

1. Abilita la virtualizzazione nidificata

Per impostazione predefinita, la virtualizzazione nidificata è consentita a livello di progetto, cartella o organizzazione. A meno che qualcuno della tua organizzazione non abbia disattivato la virtualizzazione nidificata, non devi fare nulla per attivarla.

  1. Utilizza lo strumento a riga di comando gcloud per verificare che la virtualizzazione nidificata sia consentita:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Crea un disco di avvio Ubuntu-1804-lts

  1. Vai alla console Cloud.
  2. Seleziona il progetto Google Cloud.
  3. Vai al menu Navigazione e seleziona Compute Engine > Dischi > Crea disco.
    1. Fornisci un nome per il disco. Ad esempio, ubuntu1804lts
    2. Seleziona una regione e una zona. Per supportare la virtualizzazione nidificata, assicurati che la Regione e la Zona selezionate supportino i processori Haswell (o versioni successive). Per saperne di più, consulta Regioni e zone.
    3. Seleziona l'immagine di origine di ubuntu-1804-bionic-v20210211
    4. Imposta una dimensione del disco appropriata (consigliati almeno 100 GB).

Figura 2. Crea un disco di avvio Ubuntu.

3. Crea un'immagine personalizzata con una chiave di licenza speciale per attivare VMX

  1. Vai alla console Cloud.
  2. Apri Cloud Shell e utilizza il seguente 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"
    
    • Inserisci un nome per l'immagine. Ad esempio, aaos-emulator-image
    • Imposta la zona del disco sulla zona in cui hai creato il disco.
    • Imposta il nome del disco sul nome utilizzato per crearlo.

    Ad esempio:

    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"
    

Per maggiori dettagli, consulta Istanze VM con virtualizzazione nidificata.

4. Crea un'istanza VM utilizzando l'immagine personalizzata

  1. Vai alla console Cloud.
  2. Seleziona il progetto Google Cloud.
  3. Vai a Menu di navigazione > Compute Engine > Istanza VM.

    Figura 3. Crea un'istanza VM.

  4. Inserisci un nome per l'istanza. Ad esempio, aaosemulator
  5. Seleziona la famiglia e il tipo di macchina che ti interessano. Assicurati che la macchina contenga quattro vCPU e almeno 16 GB di memoria.
  6. Seleziona la piattaforma CPU Intel Cascade Lake (o successiva).
  7. Modifica il disco di avvio impostandolo sull'immagine creata nel passaggio precedente.
  8. Attiva il firewall per:
    • Consenti traffico HTTP
    • Consenti traffico HTTPS

5. Configura il firewall per aprire le porte 80 e 443

  1. Vai alla console Cloud.
  2. Seleziona il progetto Google Cloud.
  3. Vai a Menu di navigazione > Compute Engine > Istanza VM > Configura regola firewall.

Installa il software necessario sulla VM

  1. Installa Python 3 e Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Installa l'SDK Android e ADB disponibili nel percorso.
    sudo apt install android-sdk
    

    Per installare Docker e Docker-compose, consulta Docker e Docker-compose. Assicurati di poterli eseguire come utente non root.

  3. Per verificare che la CPU supporti la virtualizzazione hardware (il comando deve restituire un numero diverso da zero):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Installa la macchina virtuale del kernel (KVM). Per installare KVM, esegui:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. Per verificare che KVM funzioni:
    sudo apt install cpu-checker
    kvm-ok
    
    L'output dovrebbe essere:
    INFO: /dev/kvm exists
    KVM acceleration can be used
  6. Per installare Node.js e Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

Avvia i container ospitati

  1. Per verificare l'installazione, esegui i container di Android Emulator ospitati dal repository pubblico. Puoi trovare i dettagli dei contenitori qui. Ora puoi eseguire questi container senza doverli compilare. Ad esempio:
    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
    

    Il contenitore viene scaricato (se non è disponibile localmente) e avviato.

  2. Quando il contenitore viene avviato, connettiti al dispositivo configurando ADB nello stesso modo in cui colleghi un AVD su un host locale. Ad esempio:
    adb connect localhost:5555
    adb devices
    
    L'output dovrebbe essere:
    List of devices attached
    localhost:5555 device

Configura il servizio AAOS Emulator

Per configurare il servizio Emulator:

  1. Installa lo script del contenitore Docker dell'emulatore Android:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. In questo modo viene attivato un ambiente virtuale e viene reso disponibile l'eseguibile emu-docker. Per informazioni dettagliate sul suo utilizzo, avvialo:
    emu-docker -h
    
  3. Per creare i container Docker, accetta i contratti di licenza.
  4. Crea il container Docker dell'emulatore AAOS.
  5. Scarica una build dell'emulatore successiva alla versione 7154743. Ad esempio:
    sdk-repo-linux-emulator-7154743.zip
    
  6. Scarica l'immagine di sistema dell'emulatore AAOS. Ad esempio, sdk-repo-linux-system-images-7115454.zip:
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Crea i contenitori web e imposta il nome utente e la password per l'accesso remoto.
    ./create_web_container.sh -p user1,passwd1
    
  8. Avvia il servizio web dell'emulatore AAOS:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

Hai avviato correttamente un servizio web di emulatore AAOS. Per accedere su un browser web:

https://<VM_External__IP>

Risoluzione dei problemi

Se si verifica un errore di connessione all'IP esterno della VM, assicurati che la VM sia configurata per consentire il traffico sia HTTP che HTTPS. Per convalidare questa operazione, consulta Eseguire un server web Apache di base.

Configura il server di conversione

Puoi sempre utilizzare il tuo server di indicazioni stradali. Di seguito è riportato un esempio su un'istanza VM Google Cloud.

Nota: per far funzionare il server TURN su un'istanza VM Google Cloud, assicurati di configurare la regola firewall della VM in modo da consentire il traffico sulle porte TCP e UDP 3478 e 3479.

  1. Installa il server coturn:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. Modifica /etc/turnserver.conf aggiungendo le seguenti righe:
    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 il file YAML di Docker Compose per includere la configurazione TURN:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. Aggiungi le seguenti due righe di ambiente nella sezione dell'emulatore:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
  5. Riavvia il servizio AAOS Emulator con la configurazione della svolta. Assicurati di sostituire l'IP, il nome utente e le credenziali del server di turn indicati di seguito con i tuoi:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up