État des lieux
Il existe plusieurs approche pour virtualiser un système Android. La plus
terrible donc consiste à utiliser l'émulateur fournit avec le kit de
développement du système d'exploitation. Et même en utilisant les images x86, les
performances sont tellement basses qu'il est très difficile de
travailler avec cet émulateur sous GNU/Linux. On passe donc.
Une autre solution consiste à passer par l'outil commercial
Genymotion qui offre d'excellentes
performances alliées à un ensemble impressionnant de fonctionnalités. C'est de
loin l'outil idéal mais qui souffre malheureusement de gros soucis de stabilité.
En effet, la magie de cet outil tient à l'usage de VirtualBox pour émuler un
android compilé pour les architectures x86 en laissant de côté l'affichage.
VirtualBox boot ainsi un Android headless auquel ce connecte un client OpenGL
Maison qui va permettre un affichage très rapide. Et c'est là que le bas blesse
finalement car sur mes plateformes Wheezy tournant sur du GPU Intel, la chose est pour
le moins instable et le client segfaulte constamment.
Une troisième approche consiste cette fois à utiliser le projet
Android-X86. Il s'agit là d'un portage d'Android
sur l'architectures de processeur Intel permettant notamment de faire
tourner Android sur un eepc, ou sur un émulateur tel VirtualBox ou KVM. D'abord
testé avec VirtualBox le résultat était assez "bof-bof" avec des performances certes
meilleur que l'émulateur Android, mais bien loin de ce qu'offre Genymotion.
En revanche c'était stable.
J'ai donc, en désespoir de cause tenté la même chose avec KVM et cette fois j'ai été
très agréablement surpris. Le résultat est aussi fluide que Genymotion, voir plus,
tout en étant totalement stable.
Installation de KVM
Pour installer KVM sous Wheezy, rien de bien compliqué. Il faut juste penser à
installer libvirt dans la la foulée.
$sudo aptitude install qemu-kvm libvirt-bin
Ensuite, Ajoutez votre utilisateur aux groupes kvm et libvirt
$sudo adduser gaston kvm
$sudo adduser gaston libvirt
Ceci fait, redémarrez votre bécane cela permettra à tous les modules d'être chargés proprement.
Création de la VM
Pour commencer, il faut télécharger l'ISO de KitKat (Android 4.4) sur le site
d'Android X86. Créez pour cela un dossier
android et placez-là dedans.
Ensuite dans ce dossier nous allons créer un disque virtuel.
$mkdir ~/android
$cd ~/android
$mv ~/téléchargements/android-x86-4.4-r1.iso .
$qemu-img create -f qcow2 android-4.4.img 1G
Formatting 'android-4.4.img', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536
Nous allons maintenant lancer la bête :
$kvm -m 512 -cdrom android-x86-4.4-r1.iso -hda android-4.4.img -boot d
Si tout se passe bien, vous devez obtenir une fenêtre en 800x600 avec un menu
Grub de base. Choisissez l'option Installation. Ensuite Create/Modify
partitions.
Là nous arrivons à l'ami cfdisk. Rien de bien compliqué ici, se sera [New]
puis [Primary]. Laissez la taille à son maximum et validez.
Ensuite sélectionnez [Bootable], puis [Write], dites yes puis lorsqu'il a
terminé d'écrire, allez sur [Quit]. Là, retour sur l'installateur, qui cette
fois affiche un sda1 comme lieu d'installation que nous allons nous empresser
de sélectionner. Choisissez un formatage en Ext3 et dites Yes aux trois
questions qui suivent. Le zinzin va mouliner puis proposer le Reboot. N'en
faite rien pour l'instant et fermez simplement la fenêtre.
Lancement
Maintenant qu'Android est installé, nous allons démarrer la VM sans cdrom de démarrage :
$kvm -m 512 -hda android-4.4.img -boot d -net nic -net user
Cette fois grub vous propose de lancer Android directement. Petites explications sur la ligne
de commande utilisée.
L'option -net nic va créer une nouvelle interface réseau virtuelle tandis que -net user met
en place une pile réseau qui ne demande aucun privilège particulier (userland). Votre VM
bénéficie donc d'une connectivité fonctionnel que vous pouvez tester avec le navigateur.
Utilisation d'ADB
ADB est un outil indispensable permettant de se connecter sur n'importe quel terminal Android pour
y lancer un shell, installer un apk, et même débugger une application hybride via Chrome (Android 4.4
seulement).
Pour accéder au serveur ADB au sein de la VM, nous allons un peu modifier notre ligne de lancement :
$kvm -m 512 -hda android-4.4.img -boot d -net nic -net user,hostfwd=tcp::4444-:5555
L'option ,hostfwd=tcp::4444-:5555 va forwarder le serveur ADB en écoute sur le port 5555
sur le pour 4444 de votre machine. Ainsi nous pouvons tranquillement lancer un shell
sur la VM android :
Installation d'adb si ce n'est pas déjà fait
$sudo aptitude install android-tools-adb
$adb connect localhost:44444
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
connected to localhost:4444
$adb shell
shell@x86:/ $
Conclusion
J'avoue avoir été très surpris par les performances de KVM. Il faut dire que ma connaissance de son
papa, qemu remonte à une époque lointaine où il était terriblement lent. Alors il est certain
que le résultat KVM+Android propose de bien moins de fonctionnalités que Genymotion mais il a le
mérite d'être aussi rapide et bien plus stable.
Là seule chose que je n'ai pas réussi à faire est de modifier la résolution d'affichage. J'ai tenté le
passage d'arguments au kernel UVESA_MODE=320x480 DPI=160 sans grand succès. Même résultat en passant par
adb/shell et wm size 320x480. Alors si quelqu'un a une idée de génie, je suis preneur :)