Google Android SDK - Android Virtual Device Manager (AVD)

Introduction

Une fois la plateforme et les APIs Android SDK installés, la seconde étape consiste à configurer les émulateurs des supports mobiles Android avec le gestionnaire AVD (Android Virtual Device). Le gestionnaire AVD est intégré dans la plateforme Android SDK.

Dans ce tutoriel, la plateforme Android SDK est installée sur une plateforme Windows XP avec les packages Android 2.3.3 et Android 4.1. Un émulateur est créé avec Android AVD Manager pour chaque version d'Android.

Sont présentés dans cet article les principes de fonctionnement de la technologie d'émulation d'un support mobile AVD : images système et utilisateur (system.img, userdata.img, userdata-qemu.img), familles de résolution et de densité de pixels (dpi) d'un appareil mobile, paramètres de configuration à l'émulation (config.ini, hardware.ini, hardware-qemu.ini)...

La création des supports mobiles AVD avec l'interface graphique d'Android AVD Manager est très partiellement abordée, celle-ci ne permet pas notamment de personnaliser les chemins d'installation des composants d'un support mobile AVD (images, carte SD, partition cache...). En revanche, la gestion en lignes de commandes avec le programme android, qui offre plus de souplesse, est détaillée.

Les émulateurs Android peuvent être créés et paramétrés après l'intégration de la plateforme Android SDK dans l'outil de développement Eclipse, quoiqu'il en soit ce paramétrage constitue d'un point de vue pratique la seconde étape de la mise en place de la plateforme complète pour le développement d'applications mobiles Android.

Cycle de vie d'une application Android, paramétrage des émulateurs et devices Android SDK

Environnement Android SDK

Pour la plateforme Android SDK installée, les variables d'environnement Windows ci-dessous sont définies :

Variable Description
%ANDROID_HOME% Répertoire racine
%ANDROID_AVD% Répertoire d'installation des supports mobiles définis (%ANDROID_HOME%\avd)
%ANDROID_SDK% Répertoire d'installation de la plateforme Android SDK (%ANDROID_HOME%\android-sdk)
%ANDROID_TOOLS% Répertoire d'installation des outils de la plateforme Android SDK (%ANDROID_SDK%\tools), répertoire contenant notamment les programmes android, apkbuilder, emulator, mksdcard etc...

La plateforme Android SDK (version 20.0.3) est installée dans le répertoire %ANDROID_SDK% (C:\Software\android\android-sdk) avec les packages suivants :

  • Android 4.1 (API Level 16) : SDK et exemples
  • Android 2.3.3 (API Level 10) : SDK et exemples
  • Google APIs pour Android 4.1
  • Google APIs pour Android 2.3.3
  • Android Support Library

Pour plus d'informations sur l'installation et l'architecture de Google Android SDK : Google Android SDK - Installation de la plateforme de développement et architecture

Les supports mobiles AVD et l'émulation

L'émulation

Bien entendu, il est hors de question de déboguer un projet Android sur ses smartphones ou tablettes Android. La plateforme Android SDK propose donc la possibilité de définir dessupports mobiles grâce à AVD avec un niveau d'API (Android 2.3.3, Android 4.1,....) afin d'émuler l'utilisation d'un smartphone ou d'une tablette Android dans l'environnement de développement (voir image ci-contre). Les applications Android en cours de développement sont déployées dans l'émulateur. Dans la pratique, un support mobile AVD est défini par niveau d'API Android et par résolution de l'appareil mobile (Nexus S, Nexus One, Galaxy SII, Tablettes etc...). Les niveaux d'API disponibles dépendent des packages Android installés dans la plateforme Android SDK. Dans ce tutoriel, 2 supports mobiles AVD sont créés pour :
  • Nexus S - Android 2.3.3 (API Level 10)
  • Nexus S - Android 4.1 (API Level 16)
Emulateur Android 2.3

Principe de fonctionnement

Architecture des images systèmes

En fonction du niveau d'API choisi, l'émulateur lance l'image système Android correspondante. Installée lors de la descente des packages Android, cette image est un fichier system.img qui contient le système d'exploitation Android. À l'intérieur de l'image Android sont incluses les 2 couches essentielles, à savoir :
  • Le noyau spécifique Linux pour Android (librariries natives).
  • La machine Java Davlik (JVM embarquée).
L'architecture du système d'exploitation Android est bien entendu plus complexe (voir diagramme ci-contre), mais ce n'est pas le sujet decet article.
Architecture des images systèmes Android

Répertoire d'installation des images systèmes

Historiquement, les images systèmes (system.img) d'Android 1.x, 2.x et 3.x utilisées par l'émulateur sont installées dans le répertoire %ANDROID_HOME_SDK%\platforms\android-<api-level>\images.

À partir de la version 4.0, les images systèmes sont installées dans le répertoire %ANDROID_HOME_SDK%\system-images\android-<api-level> et le type d'architecture des cores des supports mobiles (ARM, Intel X86...) est intégré dans la nomenclature du répertoire d'installation des images. Cette évolution prend en compte la diversification des types de cores sur les appareils mobiles qui jusqu'aux versions 3 incluses tournaient essentiellement avec une architecture core ARM.

La taille des images est de plus en plus volumineuse avec les versions. Pour monter ces images dans l'émulateur, certains vont devoir racheter un PC pour plus de puissance.

Package Répertoire d'installation (system.img) Taille (Mb)
Android 2.3.3 (API Level 10) %ANDROID_HOME_SDK%\platforms\android-10 91
Android 4.1 (API Level 16 - ARM v7a) %ANDROID_HOME_SDK%\system-images\android-16\armeabi-v7a 201

Les résolutions et densités dans les émulateurs

Le tableau ci-dessous regroupe les familles de résolutions d'écran et de densités de pixels des appareils Android (Samsung Nexus, Samsung Galaxy SII ...), liste qui n'est pas exhaustive. Les pourcentages correspondent aux proportions au niveau mondial au 1er août 2012 : Android dashboards


Densité faible (low dpi) Densité moyenne (medium dpi) Densité haute (high dpi) Densité extra haute (extra high dpi)
Petite taille (small) QVGA (240x320) 1,5 %
1,2 %
Taille classique (normal) WQVGA400 (240x400) WQVGA432 (240x432) 0,5 % HVGA (320x480) 12,1 % WVGA800 (480x800) WVGA854 (480x854) 55,3 % 17,4 %
Taille large
(large)
WVGA800 (480x800)
WVGA854 (480x854) 0,1 %
WVGA800 (480x800)
WVGA854 (480x854) 2,7 %

4,5 %
Taille extra large
(xlarge)

WXGA (1280x800)
4,7 %


D'autres familles sont disponibles mais elles sont spécifiques à quelques apparails mobiles dont les parts de marché sont assez marginales au niveau mondial. Les appareils Samsung Nexus S ou Galaxy SII sont par exemple dans la famille WVGA800 - Densité haute (high dpi).

Les plateformes Android, et ceci pour chaque niveau d'API (Android 2.3.3, Android 4.1...), intègrent ces familles de résolution d'écran et de densité de pixels dans le répertoire %ANDROID_SDK%\platforms\android-<api level>\skins.

Version d'Android Répertoire racine Sous répertoire par famille de résolution et de densité
Android 2.3.3 (API Level 10) %ANDROID_SDK%\platforms\android-10\skins\ HVGA QVGA WQVGA400 WQVGA432 WVGA800 (Samsung Nexus S, Galaxy SII...) WVGA854
Android 4.1
(API Level 16)
%ANDROID_SDK%\platforms\android-16\skins\ HVGA QVGA WQVGA400 WQVGA432 WSVGA WVGA800 (Samsung Nexus S, Galaxy SII...) WVGA854 WXGA720 (Tablettes) WXGA800 WXGA800-7in

À partir d'Android 4, les familles WXGA% correspondent aux formats des tablettes.

Chaque sous répertoire contient un fichier hardware.ini définissant la configuration par défaut (densité, mémoire RAM...). Ce fichier est un fichier modèle lors de la configuration et de l'émulation des supports mobiles AVD pour une famille donnée (WVGA800 par exemple).

%ANDROID_SDK%\platforms\android-10\skins\WVGA800\hardware.ini
# skin-specific hardware values
hw.lcd.density=240
vm.heapSize=24
hw.ramSize=256

Pour une famille donnée, les paramètres par défaut (mémoire RAM etc...) sont modifiés directement dans le fichier hardware.ini. Dans ce tutoriel, le paramètre de la mémoire RAM hw.ramsize est divisée par 2 pour la famille WVGA800 compte tenu des caractéristiques techniques du PC utilisé. Si c'est possible, augmenter le plus possible la mémoire RAM.

# skin-specific hardware values
 ...
hw.ramSize=128

Le gestionnaire AVD en mode graphique

Gestion en mode graphique des supports mobiles AVD

L'utilitaire graphique Android AVD Manager est installé dans le répertoire %ANDROID_SDK%.

C:\> "%ANDROID_SDK%\AVD Manager"
Android Device Manager - Version graphique Les propriétés d'un support mobile AVD sont également modifiables avec une interface graphique en cliquant sur le bouton "Edit...". Les familles de résolutions de d'écran et de densités de pixels en fonction de la version d'Android sont proposées dans la liste déroulante "Skin - Built-in". Dans l'exemple ci-contre, la famille WVGA800 est sélectionnée. Le bouton "Start..." lance l'émulateur pour le support mobile AVD couramment sélectionné. Avec l'interface graphique, les AVD sont créés sous Windows XP dans le répertoire C:\Documents and Settings\<user>\.android\avd\<Nom de l'AVD>.avd Exemple pour l'AVD nexus-2.3 (Windows XP) : C:\Documents and Settings\<user>\.android\avd\nexus-2.3.avd Seule l'utilisation d'AVD avec android en ligne de commandes permet de personnaliser les répertoires d'installation. Android Device Manager - Edition des propriétés d'un support mobile AVD

Configuration technique et paramétrage des supports mobiles AVD

Structure avant la première émulation du support AVD : les fichiers config.ini et userdata.img

Lors de la création basique d'un support mobile AVD en mode graphique, 2 ou 3 fichiers sont créés dans le répertoire par défaut C:\Documents and Settings\<user>\.android\avd\<Nom de l'AVD>.avd :

Android Device Manager - userdata.img et config.ini
Fichier Description
config.ini Le fichier config.ini définit l'architecture des cores, la famille de résolutions et de densité de pixels, ainsi que l'image système à charger :
# Android 2.3 (API Level 10)
image.sysdir.1=platforms\android-10\images\

# Skin : Famille de résolution et de densités de pixels
# WVGA800
skin.name=WVGA800
skin.path=platforms\android-10\skins\WVGA800

# Architecture core (arm)
abi.type=armeabi
Les propriétés hardware hw.% du support AVD sont personnalisés dans ce fichier config.ini, par exemple le support du clavier ou du GPS :
# Support du clavier
hw.keyboard=yes
# Support du GPS
hw.gps=no
Outre les propriétés hardware hw.%, bien d'autres paramètres de configuration peuvent être définis et personnalisés dans ce fichier config.ini, par exemple une carte SD :
# Support d'une carte SD
hw.sdCard=yes
sdCard.size=20M
sdCard.path=C:\Software\android\avd\nexus-2.3/sdcard-nexus-2.3.img
N.B. : lors de la définition d'une carte SD, celle-ci doit être déjà être créée avec l'exécutable mksdcard.exe installé dans le répertoire %ANDROID_TOOLS%.
%ANDROID_TOOLS%:\> mksdcard [-l label] <size> <file>
%ANDROID_TOOLS%:\> mksdcard -l sd 20M %ANDROID_AVD%\nexus-2.3\sdcard-nexus-2.3.img
La liste des paramètres de configuration d'un support mobile AVD est donnée en annexe de cet article, liste non exhaustive.
userdata.img Image modèle (template) pour le stockage des données utilisateurs. Cette image est copiée à la première émulation de l'AVD, copie dans laquelle seront stockées les préférences utilisateur et les applications Android en cours de développement.

Émulation d'un support AVD :

Un support AVD est émulé avec l'exécutable emulator.exe disponible dans le répertoire %ANDROID_TOOLS% :

%ANDROID_TOOLS%\emulator.exe -avd <Nom de l'AVD>
%ANDROID_TOOLS%\emulator.exe -avd nexus-2.3

Après la première émulation de l'AVD, initialisation qui est très longue, 2 fichiers très importants sont créés dans le répertoire par défaut C:\Documents and Settings\<user>\.android\avd\<Nom de l'AVD>.avd : hardware-qemu.ini et userdata-qemu.img.

Android Device Manager - userdata-qemu.img et hardware-qemu.ini

Les répertoires .lock sont présents lorsque l'émulateur est en cours d'exécution pour l'AVD.

Fichier Description
userdata-qemu.img Image dans laquelle les préférences utilisateur et applications Android en cours de développement sont stockées (packages Java, préférences, bases SQLite etc...). Ce fichier image est initialisé à partir du fichier modèle userdata.img.
hardware-qemu.ini À la première initialisation de l'émulateur pour un AVD, un nouveau fichier de configuration hardware-qemu.ini est généré. Ce fichier est régénéré et lu par l'exécutable emulator.exe lors de chaque émulation d'un AVD. Hormis les paramètres définissant l'architecture core CPU/ABI et la famille de résolution (skin.name, skin.path, abi.type), paramètres définis uniquement dans le fichier config.ini, à chaque régénération, le fichier de configuration hardware-qemu.ini est une compilation des autres paramètres de configuration définis dans le fichier config.ini et dans le fichier hardware.ini propre à la famille de résolution. (%ANDROID_SDK%\platforms\android-<api-level>\skins\<famille de résolution>)
# Paramètres provenant du fichier hardware.ini de la famille
# WVGA800 - Android 2.3.3
# %ANDROID_SDK%\platforms\android-10\skins\WVGA800
hw.ramSize = 128
hw.lcd.density = 240
vm.heapSize = 24
 ...
# Paramètres provenant du fichier config.ini
 ...
hw.keyboard = yes
hw.gps=no
 ...
hw.sdCard=yes
sdCard.path=C:\Software\android\avd\nexus-2.3/sdcard-nexus-2.3.img
NB important : si un même paramètre est défini dans les 2 fichiers config.ini et hardware.ini (hw.ramSize par exemple), c'est la valeur du paramètre défini dans le fichier hardware.ini qui prévaut et qui est pris en compte.

Gestion des supports mobiles AVD et des émulateurs Android en lignes de commandes

L'outil android

L'utilitaire graphique Android AVD Manager ne permet pas de délocaliser les répertoires d'installation des supports mobiles AVD.

Système d'exploitation Répertoire d'installation par défaut
avec la version graphique d'Android AVD Manager
Windows XP C:\Documents and Settings\<user>\.android\<Nom del'AVD>.avd
Windows 7 ou Vista C:\Users\<user>\.android\<Nom de l'AVD>.avd

Le programme android disponible dans le répertoire %ANDROID_TOOLS% offre la souplesse de la personnalisation des répertoires d'installation des AVD (%ANDROID_AVD% dans ce tutoriel). Outre la création et la mise à jour de projets Android, l'outil android gère également les supports mobiles AVD en lignes de commandes (création, modification et suppression).

Lister les images systèmes disponibles pour les supports mobiles AVD : android list targets

La commande android list targets liste les images systèmes Android SDK disponibles sur la plateforme :

%ANDROID_TOOLS%> android list targets
Available Android targets:
----------
id: 1 or "android-10"
     Name: Android 2.3.3
     Type: Platform
     API level: 10
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
     ABIs : armeabi
----------
id: 2 or "android-16"
     Name: Android 4.1
     Type: Platform
     API level: 16
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, W
XGA720, WXGA800, WXGA800-7in
     ABIs : armeabi-v7a

L'identifiant (id=1 ou id=android-10) est très important, cet identifiant est donné en paramètre pour la création en ligne de commandes d'un support mobile AVD.

Création de supports mobiles AVD : android create avd

Les supports mobiles AVD sont créés avec la commande android create avd, seule commande qui autorise le paramétrage du répertoire d'installation des AVD.

%ANDROID_TOOLS%> android create avd --name <Nom de l'AVD> --target <ID ou nom d'Android SDK>
                                       [--skin <Nom de la famille de résolution>]
                                       [--path <Chemin de l'installation de l'AVD>]
                                       [--abi <Nom de l'architecture ABI Core>]
                                       [--sdcard <Chemin ou taille de la carte SD>]
                                       [--force ]

Pour créér l'AVD nexus-2.3 (Android 2.3.3, famille SVGA800, Carte SD de 10M) dans le répertoire %ANDROID_AVD%\nexus-2.3 en ligne de commandes :

%ANDROID_TOOLS%> android create avd --name nexus-2.3 --target android-10
                                       --skin SVGA800
                                       --path %ANDROID_AVD%\nexus-2.3
                                       --sdcard 10M
Auto-selecting single ABI armeabi
Android 2.3.3 is a basic Android platform.
Do you wish to create a custom hardware profile [no]no
Created AVD 'nexus-2.3' based on Android 2.3.3, ARM (armeabi) processor,
with the following hardware config:
hw.lcd.density=240
vm.heapSize=24
hw.ramSize=128

L'option --force est indispensable si le répertoire est déjà existant.

Comment la plateforme Android SDK retrouve le support mobile AVD nexus-2.3 installé dans un répertoire personnalisé ? Tout simplement en lisant le fichier <Nom de l'AVD>.ini alors créé dans le répertoire par défaut d'installation des AVD (C:\Documents and settings\<user>\.android\avd pour Windows XP), fichier de configuration qui référence le chemin d'installation de l'AVD avec la variable path :

C:\Documents and Settings\<user>\.android\avd\nexus-2.3.ini
target=android-10
path=C:\Software\android\avd\nexus-2.3

Dans ce répertoire sont créés les fichiers dont le principe de fonctionnement est évoqué les paragraphes précedents :

  • config.ini
  • userdata.img
  • sdcard.img
  • userdata-qemu.img (généré à la première émulation)
  • hardware-qemu.ini (généré à chaque émulation)

Lister les supports mobiles AVD définis : android list avd

Les supports mobiles AVD sont listés avec la commande android list avd

%ANDROID_TOOLS%> android list avd
Available Android Virtual Devices:
    Name: nexus-2.3
    Path: C:\Software\android\avd\nexus-2.3
  Target: Android 2.3.3 (API level 10)
     ABI: armeabi
    Skin: WVGA800
  Sdcard: 10M
---------
    Name: nexus-4.1
    Path: C:\Software\android\avd\nexus-4.1
  Target: Android 4.1 (API level 16)
     ABI: armeabi-v7a
    Skin: WVGA800

Renommer et déplacer des supports mobiles AVD : android move avd

Pour renommer un support mobile AVD :

android move avd --name <Ancien nom de l'AVD> --rename <Nouveau nom de l'AVD>
%ANDROID_TOOLS%> android move avd --name nexus-2.3 --rename nexus-2.3.3
AVD 'nexus-2.3' moved.

Le fichier nexus-2.3.ini dans le répertoire C:\Documents and Settings\<user>\.android\avd est rénommé en nexus-2.3.3.ini

Pour déplacer un support mobile AVD vers un nouveau répertoire :

android move avd --name <Nom de l'AVD> --path <Nouveau chemin de l'AVD>
%ANDROID_TOOLS%> android move avd --name nexus-2.3 --path %ANDROID_AVD%\nexus-2.3.3
AVD 'nexus-2.3' moved.
Attention ! Le nouveau répertoire ne doit pas déjà exister

Le fichier nexus-2.3.ini dans le répertoire C:\Documents and Settings\<user>\.android\avd reflète la modification de chemin réalisée par cette commande :

nexus-2.3.ini
target=android-10
path=C:\Software\android\avd\nexus-2.3.3

Suppression de supports mobiles AVD : android avd delete

La suppression de supports mobiles AVD est réalisée avec la commande android delete avd. Le nom du support mobile AVD est donné en argument avec l'option --name

%ANDROID_TOOLS%> android delete avd --name <nom de l'AVD>

Exemple : suppression de l'AVD Nexus 4.1

%ANDROID_TOOLS%> android delete avd --name nexus-4.1
Deleting file C:\Documents and Settings\<user>\.android\avd\nexus-4.1.ini
Deleting folder C:\Software\android\avd\nexus-4.1

AVD 'nexus-4.1' deleted.

Conclusion

  • Utiliser la version graphique d'Android AVD Manager pour gérer et paramétrer les suppports mobiles, c'est bien pratique, en revanche seule l'utilisation du programme android en ligne de commandes permet de gouverner les répertoires d'installation des supports mobiles AVD.
  • Maîtriser les fichiers de configuration config.ini et hardware.ini pour un AVD est indispensable pour gérer plus efficacement les options à l'émulation d'un support mobile AVD (mémoire RAM etc...), et notamment déplacer des composants de l'AVD vers des disques plus performants (disk.cachePartition, sdCard...).
  • Dernier point, loin s'en faut, il n'est pas du tout inutile de comprendre le chargement des images noyaux d'une plateforme Android SDK (system.img) et où sont stockées les préférences et applications Android en cours de développement dans un support mobile AVD (userdata-qemu.img).

8- Annexe : Paramètres de configuration des AVD (liste non exhaustive) (hardware...)

Option Valeur
par défaut
Propriété
Taille de la mémoire RAM 96 MB hw.ramSize
Support Touch-screen yes hw.touchScreen
Support Trackball yes hw.trackBall
Support clavier yes hw.keyboard
Support DPad support yes hw.dPad
Support modem GSM yes hw.gsmModem
Support Camera no hw.camera
Taille horizontale maximum en pixels de la caméra 640 hw.camera.maxHorizontalPixels
Taille verticale maximum en pixels de la caméra 480 hw.camera.maxVerticalPixels
Supprt GPS support yes hw.gps
Support Batterie yes hw.battery
Acceleromètre yes hw.accelerometer
Support enregistrement Audio yes hw.audioInput
Support Audio yes hw.audioOutput
Support SD Card yes hw.sdCard
Densité caractéristique de l'écran AVD 160 hw.lcd.density
Taille de la carte SD 9 MB sdCard.size
Chemin de la carte carte SD
sdCard.path
Support d'une partition Cache yes disk.cachePartition
Taille de la partition Cache 66 MB disk.cachePartition.size
Chemin de la partition Cache
disk.cachePartition.path