Créer votre propre émulateur cloud

Cette page explique comment exécuter AAOS Emulator en tant que service Web et comment l'exécuter dans un navigateur web pour le rendre accessible aux utilisateurs à distance. Cela permet d'obtenir une référence minimale viable via le service Compute Engine : Cela dit, vous pouvez utiliser ce service sur n'importe quelle plate-forme cloud publique ou privée de votre choix.

Objectif

Cette configuration et cette installation centralisées rendent l'émulateur AAOS accessible à toute une entreprise, fournisseurs et développeurs de télétravail. La gestion et la mise à niveau sont ainsi plus efficaces l'émulateur AAOS vers de nouvelles versions, et élimine le temps nécessaire pour configurer et gérer les machines locales pour les utilisateurs individuels. Cette solution optimise l'utilisation des ressources matérielles et permet un environnement de développement d'applications à moindre coût. Par exemple, aux fins suivantes:

  • Recherche sur l'expérience utilisateur, évaluation de l'expérience utilisateur, service client et formation.
  • Démonstrations auprès de clients potentiels et sur les canaux de ventes
  • Testez, validez et même déboguez des applications (y compris les builds quotidiens de HMI des OEM) à grande échelle. Envisagez d'utiliser l'émulateur à la place des bancs d'essai pour développer des applications.
  • Les agents des centres d'appels des clients OEM disposent d'une interface HU uniforme et facile d'accès.

L'émulateur AAOS offre de nombreux avantages:

  • Créer un émulateur AAOS personnalisé dans le cloud à l'aide d'un script de configuration (émulateur cloud).
  • Créez une image personnalisée de Cloud Emulator AAOS pour les instances de VM: <ph type="x-smartling-placeholder">
      </ph>
    • Configuration prête d'un émulateur dans le cloud.
    • Des images AVD AAOS publiques sont mises à la disposition du créateur de services pour démarrer un AVD AAOS avec une commande. Par exemple, des images AVD publiques des OEM servent d'exemples pour que les partenaires puissent les adapter et les appliquer.

Architecture

L'architecture de l'exemple d'émulateur Cloud est illustrée ci-dessous. Votre première un service minimalement viable fonctionnera en ajoutant vos propres images AVD OEM.

Figure 1 : Architecture des AVD dans le cloud

Les principaux composants de l'émulateur sont les suivants:

cliquez ici.
Article Objectif
Android Emulator L'instance d'émulateur héberge les images AVD
Pont de poisson rouge-webrtc Application Linux permettant la communication entre l'application de réaction et l'émulateur AAOS
android-emulator-webrtc Application React pour afficher l'interface utilisateur de l'émulateur sur un site Web navigateur. React capture également les événements d'entrée utilisateur et les renvoie au serveur.
Scripts de conteneur Android Emulator Des scripts Python pour gérer et créer des images et des conteneurs Docker pour les modules logiciels ci-dessus.
Génère des jetons pour gérer les autorisations d'accès de l'émulateur.
Activer le serveur Établit une connexion directe WebRTC entre le client et le serveur. Activer le serveur n'est requis que lorsque le service d'émulateur s'exécute derrière des pare-feu ou des proxys.
Envoy

Un service proxy pour:

  • Fournissez HTTPS à l'aide d'un certificat autosigné.
  • Redirigez le trafic sur le port 80 (http) vers le port 443 (https).
  • Agir en tant que proxy gRPC pour l'émulateur.
  • Vérifiez les jetons pour autoriser l'accès au point de terminaison gRPC de l'émulateur.
  • Redirigez les autres requêtes vers le composant Nginx, qui héberge une application React.

Configurer l'émulateur sur une VM cloud

Pour créer un projet GCP:

  1. Accédez à la console Google Cloud et Sélectionnez un projet.
  2. Pour vérifier que la facturation est activée pour votre projet Google Cloud, consultez Activer, désactiver ou modifier la facturation pour un projet
  3. Activez l'API.

Créer une VM Linux dans GCE

1. Activer la virtualisation imbriquée

Par défaut, la virtualisation imbriquée est autorisée au niveau du projet, du dossier ou de l'organisation. À moins qu'un membre de votre organisation Désactivation de la virtualisation imbriquée vous n'avez rien à faire pour l'activer.

  1. Utiliser l'outil de ligne de commande gcloud pour confirmer que la virtualisation imbriquée est autorisée:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. Créer un disque de démarrage Ubuntu-1804-lts

  1. Accéder à Console Cloud :
  2. Sélectionnez le projet GCP.
  3. Accédez au menu de navigation, puis sélectionnez Compute Engine > Disques > Créer un disque.
    1. Indiquez un nom de disque. Par exemple : ubuntu1804lts
    2. Sélectionnez une région et une zone. Pour accepter la virtualisation imbriquée, assurez-vous que la région et la zone que vous sélectionnez sont compatibles avec les processeurs Haswell (ou ultérieurs). Pour en savoir plus, consultez Régions et zones.
    3. Sélectionner l'image source de ubuntu-1804-bionic-v20210211
    4. Définissez une taille de disque appropriée (100 Go ou plus recommandé).

Figure 2. Créer un disque de démarrage Ubuntu

3. Créer une image personnalisée avec une clé de licence spéciale pour activer VMX

  1. Accédez à la console Cloud.
  2. Ouvrez une session Cloud Shell et exécutez la commande suivante:
    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"
    
    • Saisissez un nom d'image. Par exemple : aaos-emulator-image
    • Définissez Zone de disque sur la zone dans laquelle vous avez créé le disque.
    • Définissez le nom du disque sur le nom que vous avez utilisé pour le créer.

    Exemple :

    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"
    

Pour en savoir plus, consultez Instance de VM de virtualisation imbriquée.

4. Créer une instance de VM à l'aide de l'image personnalisée

  1. Accédez à la console Cloud.
  2. Sélectionnez le projet GCP.
  3. Accédez au menu de navigation > Compute Engine > de VM Compute Engine.

    Figure 3. Créer une instance de VM

  4. Saisissez un nom d'instance. Par exemple : aaosemulator
  5. Sélectionnez la famille et le type de machine de votre choix. Assurez-vous que la machine contient quatre processeurs virtuels et 16 Go de mémoire (ou plus)
  6. Sélectionnez la plate-forme de processeur sur Intel Cascade Lake (ou une version ultérieure).
  7. Remplacez le disque de démarrage par l'image créée à l'étape précédente.
  8. Activez le pare-feu pour: <ph type="x-smartling-placeholder">
      </ph>
    • Autoriser le trafic HTTP
    • Autoriser le trafic HTTPS

5. Configurer le pare-feu pour ouvrir les ports 80 et 443

  1. Accédez à la console Cloud.
  2. sélectionnez le projet GCP.
  3. Accédez au menu de navigation > Compute Engine > Instance de VM > Configurez une règle de pare-feu.

Installer le logiciel requis sur la VM

  1. Installez Python 3 et Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. Installez le SDK Android. et ADB disponibles sur le chemin.
    sudo apt install android-sdk
    

    Pour installer Docker et Docker-compose, consultez Docker et Docker-compose Assurez-vous de pouvoir exécuter comme utilisateur non racine.

  3. Pour confirmer que le CPU prend en charge la virtualisation matérielle (la commande devrait renvoyer une nombre différent de zéro):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. Installer la machine virtuelle à noyau (KVM) Pour installer KVM, exécutez la commande suivante:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. Pour vérifier que KVM fonctionne:
    sudo apt install cpu-checker
    kvm-ok
    
    Vous devriez obtenir le résultat suivant:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. Pour installer Node.js et Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

Démarrer les conteneurs hébergés

  1. Pour vérifier l'installation, exécutez les conteneurs Android Emulator hébergés à partir du répertoire public un dépôt de clés. Vous trouverez des informations sur les conteneurs cliquez ici. Vous pouvez maintenant exécuter ces conteneurs sans les créer. Exemple :
    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
    

    Le conteneur est alors extrait (s'il n'est pas disponible localement) et lancé.

  2. Une fois le conteneur lancé, connectez-vous à l'appareil en configurant ADB de la même manière que la connexion d'un AVD sur un hôte local. Exemple :
    adb connect localhost:5555
    adb devices
    
    Vous devriez obtenir le résultat suivant:
    List of devices attached
    localhost:5555 device
    

Configurer le service d'émulateur AAOS

Pour configurer le service d'émulateur:

  1. Installez le script du conteneur Docker d'Android Emulator:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. Cela active un environnement virtuel et rend l'exécutable emu-docker disponible. Pour obtenir des informations détaillées sur son utilisation, lancez-le:
    emu-docker -h
    
  3. Pour créer des conteneurs Docker, acceptez les contrats de licence.
  4. Créer le conteneur Docker de l'émulateur AAOS
  5. Téléchargez un build d'émulateur ultérieur à la version 7154743. Exemple :
    sdk-repo-linux-emulator-7154743.zip
    
  6. Téléchargez l'image système de l'émulateur AAOS. Par exemple : sdk-repo-linux-system-images-7115454.zip:
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. Créer les conteneurs Web, puis définir un nom d'utilisateur et un mot de passe pour l'accès à distance
    ./create_web_container.sh -p user1,passwd1
    
  8. Démarrez le service Web de l'émulateur AAOS:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

Vous avez démarré avec succès un service Web d'émulateur AAOS. Utilisez ce qui suit pour accéder dans un navigateur Web:

https://<VM_External__IP>

Dépannage

Si une erreur de connexion à l'adresse IP externe de la VM se produit, assurez-vous que la VM est configurée pour autoriser le trafic HTTP et HTTPS. Pour le vérifier, consultez Exécutez un serveur Web Apache basique.

Configurer le serveur de rotation

Vous pouvez toujours utiliser votre propre serveur de tour. Vous trouverez ci-dessous un exemple sur une VM Google Cloud. Compute Engine.

Remarque:Pour que le serveur d'activation fonctionne sur une instance de VM Google Cloud, veillez à configurer la règle de pare-feu de la VM pour autoriser le trafic sur les ports TCP et UDP 3478 et 3479.

  1. Installez le serveur Colab:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. Modifiez /etc/turnserver.conf en ajoutant les lignes suivantes:
    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. Modifiez le fichier YAML de Docker Compose pour inclure la configuration TURN:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. Ajoutez les deux lignes d'environnement suivantes dans la section de l'émulateur:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. Redémarrez le service d'émulateur AAOS avec la configuration de tour. Veillez à remplacer l'adresse IP, le nom d'utilisateur et les identifiants du serveur de rotation ci-dessous par les vôtres:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up