Aller au contenu principal

Installation d'une VM Android

Cette page vous guide dans l'installation d'un environnement Android virtuel sous Linux.

Si vous n'avez pas besoin d'Android Studio (l'environnement de développement complet), cette procédure vous permet de n'installer que le strict nécessaire pour lancer une machine virtuelle Android.

info

Toutes les informations sur les outils en ligne de commande sont disponibles en ligne : https://developer.android.com/studio/command-line.

Prérequis

Avant d'installer la machine virtuelle en elle-même, il est nécessaire de mettre en place un certain nombre de variables d'environnement et d'installer le sdkmanager.

Pour cela :

  1. Installer la dernière version d'OpenJDK

  2. Télécharger les outils en ligne de commande : https://developer.android.com/studio#command-line-tools-only

  3. Créer l'arborescence de répertoires qui accueillera le SDK :

    sudo mkdir -p /opt/android-sdk/cmdline-tools
  4. Décompresser le contenu de l'archive téléchargée à l'étape 2, et renommer le répertoire cmdline-tools en tools :

    unzip /chemin/vers/commandlinetools-linux-*_latest.zip && mv cmdline-tools tools
  5. Déplacer ou copier ce répertoire dans le répertoire créé précédemment :

    sudo cp -r tools /opt/android-sdk/cmdline-tools
  6. Mettre les variables d'environnement en place dans le fichier du profil du shell de l'utilisateur :

    echo 'export ANDROID_SDK_ROOT="/opt/android-sdk"' >> ~/.profile
    echo 'PATH="$PATH:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$ANDROID_SDK_ROOT/emulator"' >> ~/.profile
    source ~/.profile
  7. Créer le groupe android-sdk, y inclure l'utilisateur courant et donner les droits sur le dossier :

    sudo groupadd android-sdk
    sudo gpasswd -a $USER android-sdk
    sudo setfacl -R -m g:android-sdk:rwx /opt/android-sdk
    sudo setfacl -d -m g:android-sdk:rwX /opt/android-sdk
    sudo chown -R :android-sdk /opt/android-sdk
    sudo chmod u+w /opt/android-sdk
    Prise en compte

    Il est nécessaire de se relogguer ou d'exécuter newgrp android-sdk pour que les changements prennent effet.

  8. Installer les tools du SDK :

    /opt/android-sdk/cmdline-tools/tools/bin/sdkmanager --sdk_root=/opt/android-sdk "tools"

Vous avez désormais tout le nécessaire pour utiliser les outils en ligne de commande afin de gérer votre environnement.

Android Virtual Device

Gérer les SDK et outils

Prérequis

  • vérifier le PATH pour l'accès aux commandes :

    $ echo $PATH | grep -i --color android
    /home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin:/opt/android-sdk/cmdline-tools/tools/bin:/opt/android-sdk/emulator
  • vérifier ANDROID_SDK_ROOT :

    $ echo $ANDROID_SDK_ROOT
    /opt/android-sdk
  • vérifier les droits dans le dossier d'installation :

    $ ls -lg $ANDROID_SDK_ROOT
    drwxrwxr-x+ 3 android-sdk 4096 Jul 29 15:30 cmdline-tools
    drwxrwxr-x+ 8 android-sdk 4096 Jul 29 15:48 emulator
    drwxrwxr-x+ 2 android-sdk 4096 Jul 29 15:47 licenses
    drwxrwxr-x+ 3 android-sdk 4096 Jul 29 15:47 platform-tools
    drwxrwxr-x+ 6 android-sdk 4096 Jul 29 15:48 tools

Commandes utiles

Quelques commandes utiles de sdkmanager :

  • vérifier ce qui est installé :

    $ sdkmanager --list
    Installed packages:=====================] 100% Computing updates...
    Path | Version | Description | Location
    ------- | ------- | ------- | -------
    emulator | 30.0.26 | Android Emulator | emulator/
    patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4/
    platform-tools | 30.0.4 | Android SDK Platform-Tools | platform-tools/
  • mettre à jour les SDK :

    $ sdkmanager --update

Gérer les machines virtuelles

Avant de créer un AVD (Android Virtual Device ou périphérique virtuel), il faut installer une image système installée dans l'environnement.

Pour cela :

  1. Installer les éléments nécessaires platforms et platform-tools :

    sdkmanager "platforms;android-33" "system-images;android-33;google_apis;x86_64"
    sdkmanager --install platform-tools
  2. Créer l'AVD suivant l'image installée :

    avdmanager create avd -n avd-android33-pixel -k "system-images;android-33;google_apis;x86_64" --device "pixel"
  3. Enfin, démarrer l'AVD à partir de la ligne de commande en utilisant le nom donné lors de la commande de création :

    emulator -avd avd-android33-pixel
Lister les AVD disponibles dans l'émulateur
$ emulator -list-avds
avd-android30-pixel
avd-android33-pixel

Astuces

Clavier physique

Pour utiliser le clavier physique de l'ordinateur dans l'émulateur, modifier la valeur de la variable hw.keyboard dans le fichier ~/.android/avd/<votre avd>/config.ini :

hw.keyboard = yes

Manipuler l'émulateur

On peut envoyer des commandes à l'émulateur pour simuler des activités particulières : recevoir un SMS, modifier la position du GPS, la puissance du GSM, etc.

La liste des actions possibles est disponible dans la documentation produit : https://developer.android.com/studio/run/emulator-console

Exemple pour l'envoi d'un SMS :

$ telnet localhost 5554

Trying ::1...
Connected to localhost.
Escape character is '^]'.
Android Console: Authentication required
Android Console: type 'auth <auth_token>' to authenticate
Android Console: you can find your <auth_token> in
'/home/user/.emulator_console_auth_token'
OK
auth FEHdxl/bQ4B24S2l
Android Console: type 'help' for a list of commands
OK
sms send 4085555555 hi there
OK

Ouvrir un root shell

La console root shell diffère de la console shell adb des manières suivantes :

  • Elle crée un shell racine qui permet de modifier de nombreuses parties du système.
  • Elle fonctionne même si le démon adb dans le système émulé est défectueux.
  • En appuyant sur Ctrl+C (⌘C), l'émulateur s'arrête à la place du shell.

Pour plus d'informations, voir https://developer.android.com/studio/run/emulator-commandline#advanced

Se connecter via ADB

adb devices
adb shell
emu64x:/ $ su
emu64x:/ # (you win!)

Captures d'écran

Problèmes connus

Erreur sdkmanager "Could not create settings"

Symptômes

Quelle que soit la commande de sdkmanager, on obtient cette réponse :

$ sdkmanager --list
Warning: Could not create settings
java.lang.IllegalArgumentException
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.<init>(SdkManagerCliSettings.java:428)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:152)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:134)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:57)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)

Solution

Il faut aider l'application java à trouver le root sdk.

Pour cela :

sdkmanager --sdk_root=/opt/android-sdk --list

Erreur "Warning: Failed to read or create install properties file."

Symptômes

Impossible d'écrire dans le répertoire /opt/android-sdk.

Solution

Il faut donner les droits d'accès au groupe de l'utilisateur.

Pour cela :

$ sudo chmod g+w /opt/android-sdk
$ newgrp android-sdk

Erreur : certaines applications Android affichent un écran noir ou corrompu

Symptômes

Sur une machine relativement récente, il est possible que Vulkan soit utilisé et qu'il ne soit pas encore très stable.
Certaines fenêtres, telles que Chrome, peuvent apparaître avec des erreurs graphiques ou des écrans noirs de ce type :

Solution

Il faut désactiver Vulkan dans l'émulateur.

Pour cela :

  1. Exécuter la commande suivante :

    cat >> ~/.android/advancedFeatures.ini << EOF
    Vulkan = off
    GLDirectMem = on
    EOF
  2. Relancer l'émulateur.

Si des problèmes subsistent

Si des erreurs visuelles sont toujours présentes, il est possible que le système utilise le pilote graphique expérimental xe pour la carte graphique. Celui-ci n'est pas non plus stable à ce jour, il peut donc être nécessaire de le désactiver à l'aide de la commande suivante :

/sbin/lsmod | grep -wq ^xe && { echo "blacklist xe" | sudo tee /etc/modprobe.d/blacklist-experimental-xe-gpu.conf >/dev/null && echo "You need to reboot"; }

Puis, redémarrer la machine.

Erreur emulator

Deux binaires sont disponibles dans l'installation : /opt/android-sdk/tools/emulator et /opt/android-sdk/emulator/emulator.

Moins de problèmes ont été rencontrés avec la version installée dans /opt/android-sdk/emulator (cf. sdkmanager --list). Pour autant, selon la variable $PATH, c'est l'autre binaire qui sera utilisé (cf. which emulator).

Au besoin, utiliser explicitement /opt/android-sdk/emulator/emulator en modifiant le PATH.

Références

https://medium.com/michael-wallace/how-to-install-android-sdk-and-setup-avd-emulator-without-android-studio-aeb55c014264