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.
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 :
-
Installer la dernière version d'OpenJDK
-
Télécharger les outils en ligne de commande : https://developer.android.com/studio#command-line-tools-only
-
Créer l'arborescence de répertoires qui accueillera le SDK :
sudo mkdir -p /opt/android-sdk/cmdline-tools
-
Décompresser le contenu de l'archive téléchargée à l'étape 2, et renommer le répertoire
cmdline-tools
entools
:unzip /chemin/vers/commandlinetools-linux-*_latest.zip && mv cmdline-tools tools
-
Déplacer ou copier ce répertoire dans le répertoire créé précédemment :
sudo cp -r tools /opt/android-sdk/cmdline-tools
-
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 -
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-sdkPrise en compte
Il est nécessaire de se relogguer ou d'exécuter
newgrp android-sdk
pour que les changements prennent effet. -
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 :
-
Installer les éléments nécessaires
platforms
etplatform-tools
:sdkmanager "platforms;android-33" "system-images;android-33;google_apis;x86_64"
sdkmanager --install platform-tools -
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"
-
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
$ 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 :
-
Exécuter la commande suivante :
cat >> ~/.android/advancedFeatures.ini << EOF
Vulkan = off
GLDirectMem = on
EOF -
Relancer l'émulateur.
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
.