Eigenen Cloud-Emulator erstellen

Auf dieser Seite wird beschrieben, wie Sie den AAOS-Emulator als Webdienst ausführen und in einen Webbrowser, damit Nutzer per Fernzugriff darauf zugreifen können. So erhalten Sie eine lückenlose, minimal realisierbare Referenz durch Google Cloud Compute Engine Sie können diesen Dienst jedoch auf jeder öffentlichen oder privaten Cloud-Plattform Ihrer Wahl verwenden.

Zweck

Durch diese zentralisierte Konfiguration und Einrichtung ist der AAOS-Emulator im gesamten Unternehmen zugänglich. Lieferunternehmen und Entwickelnden zu Hause arbeiten. So lassen sich die Verwaltung und Umstellung effizienter gestalten. AAOS-Emulator auf neue Versionen umstellen und Zeit für die Einrichtung und Verwaltung lokaler Computer sparen für einzelne Nutzende. Diese Lösung optimiert die Nutzung von Hardwareressourcen und ermöglicht und kostengünstigere App-Entwicklungsumgebung nutzen. Zum Beispiel für folgende Zwecke:

  • Nutzungsstudien, Bewertung der Nutzererfahrung, Kundensupport und Schulungen.
  • Demos für potenzielle Kunden und in Vertriebskanälen
  • Apps (einschließlich täglicher OEM-HMI-Builds) in großem Umfang testen, validieren und sogar debuggen. Erwägen Sie den Emulator als Ersatz für die Testbänke, die zur Entwicklung von Apps verwendet werden.
  • Die Kundenservicemitarbeiter im Callcenter von OEMs haben eine einheitliche, leicht zugängliche HU-Benutzeroberfläche.

Die Verwendung des AAOS-Emulators bietet zahlreiche Vorteile:

  • Mit einem Setupskript einen benutzerdefinierten und cloudbasierten AAOS-Emulator erstellen (Cloud-Emulator).
  • Erstellen Sie ein benutzerdefiniertes AAOS-Cloud-Emulator-Image für VM-Instanzen: <ph type="x-smartling-placeholder">
      </ph>
    • Bereit zur Einrichtung eines cloudbasierten Emulators.
    • Öffentliche AAOS-AVD-Images, mit denen der Dienstersteller ein AAOS-AVD starten kann einen Befehl. Beispielsweise können öffentliche OEM-AVD-Bilder als Beispiele dienen, die Partner anpassen und anwenden können.

Architektur

Die Architektur des Cloud-Emulator-Beispiels ist unten dargestellt. Ihr erstes mit Ihren eigenen OEM-AVD-Bildern funktioniert.

Abbildung 1: Cloud AVD-Architektur.

Die wichtigsten Emulatorbausteine sind:

hier.
Artikel Zweck
Android-Emulator Emulator-Instanz hostet AVD-Images
Goldfisch-Webrtc-Brücke Linux-App zur Kommunikation zwischen der Reaktions-App und dem AAOS-Emulator
Android-Emulator-WebRTC React-App zur Anzeige der Emulator-Benutzeroberfläche in einem Web Browser. React erfasst außerdem Nutzereingabeereignisse und sendet sie an den Server zurück.
Container-Scripts im Android-Emulator Python-Scripts zum Verwalten und Erstellen von Docker-Images und -Containern für die oben genannten Softwaremodule.
Erzeugt Tokens, um die Zugriffsberechtigungen des Emulators zu verwalten.
Server einschalten Stellt eine direkte WebRTC-Verbindung zwischen dem Client und dem Server her. Server einschalten ist nur erforderlich, wenn der Emulator-Dienst hinter Firewalls oder Proxys ausgeführt wird.
Envoy

Einen Proxy-Dienst, um:

  • Stellen Sie HTTPS mit einem selbst signierten Zertifikat bereit.
  • Leiten Sie Traffic von Port 80 (http) zu Port 443 (https) weiter.
  • Als gRPC-Proxy für den Emulator fungieren.
  • Überprüfen Sie die Tokens, um Zugriff auf den gRPC-Endpunkt des Emulators zu gewähren.
  • Andere Anfragen an die Nginx-Komponente weiterleiten, die eine React-Anwendung hostet.

Emulator auf einer Cloud-VM einrichten

So erstellen Sie ein GCP-Projekt:

  1. Rufen Sie die Google Cloud Console auf und Projekt auswählen
  2. Informationen zum Aktivieren der Abrechnung für Ihr Google Cloud-Projekt finden Sie unter Abrechnung für ein Projekt aktivieren, deaktivieren oder ändern
  3. Aktivieren Sie die API.

Linux-VM in GCE erstellen

1. Verschachtelte Virtualisierung aktivieren

Standardmäßig ist die verschachtelte Virtualisierung auf Projekt-, Ordner- oder Organisationsebene zulässig. Es sei denn, jemand in Ihrer Organisation hat die verschachtelte Virtualisierung deaktiviert, müssen Sie nichts weiter tun.

  1. gcloud-Befehlszeilentool verwenden um zu bestätigen, dass die verschachtelte Virtualisierung zulässig ist:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Bootbares Ubuntu-1804-lts-Laufwerk erstellen

  1. Gehe zu Cloud Console:
  2. Wählen Sie das GCP-Projekt aus.
  3. Öffnen Sie das Navigationsmenü und wählen Sie Compute Engine > Laufwerke > Laufwerk erstellen.
    1. Geben Sie einen Namen für das Laufwerk an. Beispiel: ubuntu1804lts
    2. Wählen Sie eine Region und Zone aus. Um die verschachtelte Virtualisierung zu unterstützen, muss die Region und Zone, die Sie auswählen, unterstützen Haswell-Prozessoren (oder höher). Weitere Informationen finden Sie unter Regionen und Zonen.
    3. Quell-Image von ubuntu-1804-bionic-v20210211 auswählen
    4. Legen Sie eine geeignete Laufwerksgröße fest (empfohlen werden 100 GB oder mehr).

Abbildung 2: Erstellen Sie ein bootfähiges Ubuntu-Laufwerk.

3. Erstellen Sie ein benutzerdefiniertes Image mit einem speziellen Lizenzschlüssel, um VMX zu aktivieren

  1. Rufen Sie die Cloud Console auf.
  2. Öffnen Sie Cloud Shell und verwenden Sie den folgenden Befehl:
    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"
    
    • Geben Sie einen Image-Namen ein. Beispiel: aaos-emulator-image
    • Legen Sie für die Laufwerkszone die Zone fest, in der Sie das Laufwerk erstellt haben.
    • Geben Sie als Laufwerknamen den Namen an, mit dem Sie das Laufwerk erstellt haben.

    Beispiel:

    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"
    

Weitere Informationen finden Sie unter Verschachtelte Virtualisierungs-VM-Instanz:

4. VM-Instanz mit dem benutzerdefinierten Image erstellen

  1. Rufen Sie die Cloud Console auf.
  2. Wählen Sie das GCP-Projekt aus.
  3. Klicken Sie auf Navigationsmenü > Compute Engine > VM-Instanz.

    Abbildung 3: Erstellen Sie eine VM-Instanz.

  4. Geben Sie einen Instanznamen ein. Beispiel: aaosemulator
  5. Wählen Sie die gewünschte Maschinenfamilie und den gewünschten Typ aus. Die Maschine muss vier vCPUs und 16 GB Arbeitsspeicher (oder mehr)
  6. Wählen Sie als CPU-Plattform Intel Cascade Lake (oder höher) aus.
  7. Ändern Sie das Bootlaufwerk in das im vorherigen Schritt erstellte Image.
  8. Firewall aktivieren für: <ph type="x-smartling-placeholder">
      </ph>
    • HTTP-Traffic zulassen
    • HTTPS-Traffic zulassen

5. Firewall zum Öffnen von Port 80 und 443 konfigurieren

  1. Rufen Sie die Cloud Console auf.
  2. und wählen Sie das GCP-Projekt aus.
  3. Klicken Sie auf Navigationsmenü > Compute Engine > VM-Instanz > Richten Sie eine Firewallregel ein.

Erforderliche Software auf der VM installieren

  1. Installieren Sie Python 3 und Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Installieren Sie das Android SDK. und ADB im Pfad verfügbar sind.
    sudo apt install android-sdk
    

    Informationen zum Installieren von Docker und Docker-compose finden Sie unter Docker und Docker-compose: Stellen Sie sicher, dass Sie Nutzer ohne Root-Berechtigung.

  3. Um zu prüfen, ob die CPU Hardwarevirtualisierung unterstützt (der Befehl sollte zu einer Zahl ungleich null):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Kernel Virtual Machine (KVM) installieren Führen Sie folgenden Befehl aus, um KVM zu installieren:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. So prüfen Sie, ob KVM funktioniert:
    sudo apt install cpu-checker
    kvm-ok
    
    Die Ausgabe sollte so aussehen:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. So installieren Sie Node.js und Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

Gehostete Container starten

  1. Führen Sie die gehosteten Android Emulator-Container aus der öffentlichen Version aus, um die Installation zu prüfen zu erstellen. Hier finden Sie Details zu den Containern, hier. Sie können diese Container jetzt ausführen, ohne sie zu erstellen. Beispiel:
    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
    

    Dadurch wird der Container abgerufen (falls er nicht lokal verfügbar ist) und gestartet.

  2. Wenn der Container gestartet wird, stellen Sie eine Verbindung zum Gerät her, indem Sie ADB auf dieselbe Weise konfigurieren wie ein AVD auf einem lokalen Host verbinden. Beispiel:
    adb connect localhost:5555
    adb devices
    
    Die Ausgabe sollte so aussehen:
    List of devices attached
    localhost:5555 device
    

AAOS-Emulator-Dienst einrichten

So richten Sie den Emulator-Dienst ein:

  1. Installieren Sie das Android Emulator Docker-Containerskript:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. Dadurch wird eine virtuelle Umgebung aktiviert und die ausführbare Datei „emu-docker“ verfügbar. Starten Sie das Tool, um detaillierte Informationen zu seiner Verwendung zu erhalten:
    emu-docker -h
    
  3. Akzeptieren Sie die Lizenzvereinbarungen, um die Docker-Container zu erstellen.
  4. Erstellen Sie den Docker-Container für den AAOS-Emulator.
  5. Laden Sie einen Emulator-Build nach Version 7154743 herunter. Beispiel:
    sdk-repo-linux-emulator-7154743.zip
    
  6. Laden Sie das System-Image des AAOS-Emulators herunter. Beispiel: sdk-repo-linux-system-images-7115454.zip:
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Erstellen Sie die Webcontainer und legen Sie einen Nutzernamen und ein Passwort für den Remotezugriff fest.
    ./create_web_container.sh -p user1,passwd1
    
  8. Starten Sie den AAOS-Emulator-Webdienst:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

Sie haben erfolgreich einen AAOS-Emulator-Webdienst gestartet. Verwenden Sie folgenden Code, um auf in einem Webbrowser:

https://<VM_External__IP>

Fehlerbehebung

Wenn ein Verbindungsfehler zur externen IP-Adresse der VM auftritt, prüfen Sie, ob die VM so eingerichtet ist, dass sie HTTP- und HTTPS-Traffic. Informationen zur Validierung finden Sie unter Einfachen Apache-Webserver ausführen

Turnserver einrichten

Du kannst immer deinen eigenen Turnserver verwenden. Das folgende Beispiel zeigt eine Google Cloud-VM Instanz.

Hinweis:Damit der Turn-Server auf einer Google Cloud-VM-Instanz funktioniert, Konfigurieren Sie die VM-Firewallregel so, dass Traffic über die TCP- und UDP-Ports 3478 und 3479 zugelassen wird.

  1. Installieren Sie den Coturn-Server:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. Ändern Sie /etc/turnserver.conf, indem Sie die folgenden Zeilen hinzufügen:
    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. Ändern Sie die YAML-Datei „Docker Compose“ so, dass sie die TURN-Konfiguration enthält:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. Fügen Sie im Abschnitt „Emulator“ die folgenden beiden Umgebungszeilen hinzu:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. Starten Sie den AAOS-Emulator-Dienst mit der Abbiegekonfiguration neu. Achten Sie darauf, die IP-Adresse des Turnservers, den Nutzernamen und die Anmeldedaten unten durch Ihre eigenen zu ersetzen:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up