Artisan Numérique

/développement/android/ S'approprier son terminal Android

Dans la majorité des cas, les fabricants nous livrent des terminaux mobiles aux droits restreints. C'est une peu comme si, sur votre ordinateur personnel, il vous était interdit de disposer du rôle administrateur. Cela peut se comprendre pour du matériel qui nous est prêté (une freebox, un compteur EDF), mais c'est proprement inacceptable lorsque l'on paye son terminal une petite fortune. Et c'est tout aussi inacceptable pour ses offre miraculeuses avec obligation d'abonnement car si vous faites le calcul, vous vous rendre vite compte que les opérateurs ne font pas de cadeaux et que vous payez souvent le prix fort, mais étalé sur la durée de votre engagement.

Mais au delà de l'aspect étique, cet état de fait est bloquant dans pas mal de situation, interdisant un usage légitime du terminal comme par exemple y installer un serveur FTP ou VNC, faire du partage de connexion 3G, installer une nouvelle ROM, etc...

Même si les manipulations qui suivent sont transposables sur d'autres terminaux Android, elles n'ont été testées que sur les HTC Hero et Desire. S'approprier de la sorte un téléphone est toujours une opération délicate et je ne saurais être tenu responsable si vous aboutissez à un presse-papier de luxe. Enfin sachez que la garantie saute dés lors que vous outrepassez les limitations imposées par le constructeur. Vous voilà prévenu.

S'approprier le mode recovery

La théorie

Tous les terminaux android disposent d'un mode spécial appelé Recovery qui peut être vu comme une sorte de mode "sans échec" permettant de réinitialiser l'appareil en cas de pépin avec le système principal. Ce mode recovery est activable machine éteinte, lors du rallumage, par une combinaison de touche spécifique à chaque appareil. Pour un HTC hero, il suffit de maintenir pressée la touche "home" à l'allumage. Pour un HTC Desire, c'est un peu plus indirect, en maintenant pressé la touche "volume bas" et en sélectionnant recovery dans les options proposées.

Lorsque l'androphone démarrage en mode recovery, il boot sur une partition spéciale appelée elle aussi recovery. Cette partition contient une version minimal de GNU/Linux. Le principe de l'appropriation est donc de remplacer le système d'exploitation contenu dans cette partition, par une version proposant beaucoup plus d'options :

  • Le NAND Backup/Restore consistant à sauvegarder et restaurer toute la mémoire NAND du terminal sur la carte SD.
  • Le WIPE consistant à effacer certaines partition du terminal pour permettre une installation propre. Il sera ainsi possible de réinitialiser les partitions system et data, mais aussi de vider le cache du compilateur JIT de Dalvik (la machine virtuelle Java pour Android). Le WIPE est une opération souvent nécessaire pour l'installation de nouvelles ROM.
  • L'update permettant d'installer une nouvelle ROM ou un patch pour une ROM installée, à partir d'un fichier ZIP présent sur la carte SD.
  • L'activation du port USB en mode debuggage permettant, via ADB, de lancer un shell disposant des accès root.

Il existe plusieurs recovery de remplacement, les plus célèbres étant Amon-RA et ClockworkMod, qui proposent peu ou prou les mêmes fonctionnalités. Une fois cette recovery installée, vous avez deux possibilités. Soit vous installez une application appelée "SuperUser" qui permet, un peu comme un sudo, d'accéder aux droits root à la demande. Soit d'installez une nouvelle ROM qui dans la majorité des cas intègre, entre autres choses, cet utilitaire. Dans un cas comme dans l'autre l'appropriation est totale et vous pouvez faire ce que bon vous semble de votre machine.

La magie du One-Click-Root

La manière la plus simple de s'approprier son terminal est de vérifier si par chance il est pris en charge par un utilitaire magique, dénommé génériquement "One Click Root". Ces outils sont en réalité des scripts plus ou moins évolués qui vont se charger, pour un appareil donné, de réaliser pour vous toutes les opérations évoquées plus haut (flashage de la recovery, installation du sudo, etc.). De tels outils existent pour pas mal de téléphone comme le X10 de sony, le Nexus One, etc.

Ces outils, pour flasher la partition recovery, reposent sur une faille qu'ils exploitent pour outrepasser les limitation imposées par le constructeur. En d'autres termes, il ne faut pas se leurrer, on est très exactement dans le même cas que les iPhones et leur Jailbreaks.

Concernant l'HTC Desire (qui vient remplacer mon Hero dont le digitalizer et le port USB est parti en sucette..), c'est l'équipe unrevoked qui a réussi l'exploit de nous packager un utilitaire de rootage de téléphone qui marche tout seul de bout en bout. Il fonctionne en réalité pour 5 terminaux : l'HTC EVO 4G, l'HTC Hero, l'HTC Desire, l'HTC Aria et le Droid. Et comble du luxe, cet outil existe sous Linux, Mac OS et Windows (Linux reste fortement conseillé).

Avec cet outil, aucune prise de tête, vous téléchargez l'outil (un tar.gz contenant un binaire sous Linux), vous l'exécutez et vous faites juste ce qui est dit sur l'écran. Ce qui correspond en gros à activer le mode "debuggage USB" du terminal, le brancher et attendre que ça passe...

Une fois que l'outil a terminé son travail, vous avez une nouvelle recovery (mouture ClockworkMod), ainsi que l'application "sudo" vous permettant de passer en root à volonté. Simple et sans bavure, et personnellement testé sur mon HTC Desire.

Appropriation à l'ancienne

La méthode FlashRec n'exploite à ma connaissance pas de faille, et ne passera donc que sur des androphones peu protégés comme l'HTC Hero. Flashrec est une application libre tout ce qu'il y a de plus standard qui permet de sauvegarder et de restaurer la partition recovery, et donc de la replacer par une version plus souple que celle d'origine. Téléchargez la version 20090815 (qui est la seul qui fonctionne chez moi) sur votre machine de bureau. La seconde chose qui va nous falloir est une image de remplacement pour la partition "recovery". Vous pouvez utiliser pour l'HTC Hero l'excellente Amon-RA.

Maintenant nous avons tout ce qu'il nous faut. Pour ne prendre que le minimum de risque, nous allons placer tout cela sur la carte SD du Hero, en prenant soin de la formater préalablement. Si vous avez des choses dessus, recopiez-les en local en faisant glisser la barre de notification du téléphone, puis Connectez avec un câble USB et enfin Monter. La carte devrait apparaître sous Nautilus pour vous permettre la sauvegarde. Ensuite renouveler l'opération en choisissant cette fois Éteindre le périphérique de stockage, puis Éteindre.

Vos données étant maintenant au chaud, vous pouvez formater le disque en exécutant la séquence suivante : boutons home puis menu, paramètres, Carte SD et mémoire, Désactiver la carte SD, puis Formater la carte SD.

Sous Linux, ce n'est pas parce que les fichiers sont copiés qu'ils sont physiquement stockés sur la carte SD. Pour vous en assurer, dans une console, usez de la commande sync qui seule peut vous assurer que tout a été correctement transféré. Ensuite seulement vous pouvez "éteindre" le montage sur le téléphone.

Vous pouvez maintenant éteindre le stockage USB. Ensuite, pour lancer l'installation de FlashRec, il va nous falloir un gestionnaire de fichier. Vous en trouverez un gratuit qui s'appelle Linda sur le Market. Une fois l'application installée, lancez là et allez dans le dossier sdcard, vous y retrouverez les deux fichiers. Sélectionnez FlashRec et utilisez l'installateur d'application.

Une fois FlashRec installé, retournez sur la home, affichez la liste des applications disponibles et sélectionnez Recovery Flasher. L'interface est très simple : une zone de saisie et deux boutons. Souvenez vous seulement d'une chose, en aucun cas il ne faut cliquer sur Flash Cyanogen Recovery 1.4.

Prudence étant mère de sûreté, avant tout chose, nous allons créer une copie de sauvegarde de la partition recovery. Pour cela cliquez sur le bouton Backup Recovery Image. Après un moment, vous devez obtenir à la racine de la carte SD, un fichier recovery-backup.img de 5242880 octets. Remontez le disque SD pour vérifier cela et sauvegardez ce fichier sur votre disque local. Ceci fait, éteignez à nouveau le stockage USB.

Retournez sur FlashRec, le bouton que nous avons précédemment utilisé doit maintenant proposer l'opération inverse : Restore Backup Recovery Image. C'est cette option que nous utiliserons si nous avons envie de remettre le téléphone dans son état standard. Pour l'heure nous allons passer au flashage de la nouvelle image en utilisant la zone de saisie et en tapant /sdcard/cm-hero-recovery.img. Attention à la prédiction du clavier qui peut vous rajouter des accents, ce qui se traduirait par le texte Invalid Recovery Image dans le premier bouton. Si vous avez correctement tapé, vous devez avoir dans ce bouton le texte Flash Custom Recovery Image. Si c'est le cas, cliquez dessus. Après un court moment l'image est flashée et il ne nous reste plus qu'à découvrir le fameux mode Recovery.

Pour cela, nous devons éteindre complètement le téléphone en appuyant longuement sur le bouton Décrocher jusqu'à ce qu'un menu apparaisse. Nous sélectionnons alors Éteindre, puis OK. Un fois l'appareil hors-fonction, pour passer en mode recovery, vous devez appuyer sur la touche Home, la maintenir pressée et appuyant sur la touche Décrocher. Maintenez les deux touches pressées ensemble jusqu'à ce que le téléphone vibre et affiche le logo Hero. Vous pouvez alors relâcher et attendre quelques instants. Apparaît alors le menu de notre nouveau mode recovery.

Que faire maintenant

Rootage du terminal

Si vous avez utilisé la méthode "1Click Root", cette étape est inutile. La ROM de votre terminal contient en effet déjà l'utilitaire de rootage et vous pouvez des maintenant utiliser toutes les applications qui en ont besoin (voir le chapitre concerné un peu plus loin).

Comme nous le disons plus haut, le mode recovery active par défaut le mode de debuggage de l'USB, nous pouvons donc lancer une commande ./adb shell pour ouvrir un terminal qui disposera des droits root. L'étape suivante va donc être d'installer dans la ROM existante, le poeudo-sudo pour parachever notre rootage.

L'outil que nous allons utiliser s'appelle SuperUser. Son principe est de n'autoriser l'accès root à une application que si vous validez cet accès à l'écran. Une sorte d'Allow-Deny à la Windows Vista. Nous allons donc commencer par télécharger cet outil ici et le décompresser. A l'intérieur se trouve une application android Superuser.apk qui va communiquer avec un utilitaire bas niveau su.

Pour installer nos deux fichiers, nous allons devoir monter la partition system. Cette partition, comme son nom l'indique, contient toutes les applications (system/app), les commandes (system/su), le paramétrage (system/etc), etc. Par défaut, en mode Recovery, cette partition n'est évidement pas montée. Elle correspond au périphérique /dev/block/mtdblock3 qui utilise le système de fichier yaffs2. Pour la monter nous exécutons donc la commande suivante :

gastonadb shell mount /dev/block/mtdblock4 /system
Montage de la partition system

Nous allons maintenant utiliser la commande adb pour envoyer nos deux fichiers sur le téléphone.

gastonadb push su /system/bin/
gastonadb push Superuser.apk /system/app/
Utilisation d'adb pour pousser les fichiers sur le téléphone

La commande su appartenant à root, elle a besoin du sticky-bit pour permettre l'escalade de privilèges.

gastonadb shell chmod 4755 /system/bin/su
Ajout du sticky-bit à su

Et voilà, c'est terminé, vous pouvez maintenant redémarrer votre téléphone

gastonadb shell reboot
Redémarrage du téléphone

Une fois la machine en route, vous pouvez relancer la commande adb pour ouvrir un shell sur le téléphone. Vous êtes alors toujours en utilisateur non-privilégie ($). Tapez la commande su et validez. Sur l'écran du téléphone devrait apparaître une demande de confirmation du passage à root. Cliquez sur le bouton Allow. Et zou, sur la console abd, vous êtes maintenant root (invite #).

Sauvegarder la mémoire flash du Hero

Un autre usage bien utile est de permettre de faire une sauvegarde complète du terminal sur la carte SD. Pour cela repassez en mode Recovery, et sélectionnez l'option nandroid backup. Cet utilitaire va nous permettre de sauvegarder complètement notre téléphone et ainsi nous permettre de le restaurer à son état initial en utilisant l'option Restore Latest Backup.

Sélectionnez donc l'option nandroid backup avec le trackball, puis cliquez dessus (en pressant le trackball). Une confirmation vous est demandé en appuyant sur la touche home, après la sauvegarde commence et peut prendre un certain temps car il peut y avoir, selon ce que vous avez installé comme application, jusqu'à 512mo de données à transférer.

Une fois l'opération terminée, l'utilitaire vous renvoie au menu. Sélectionnez l'option Reboot system now pour relancer le téléphone. Lorsque le système c'est totalement initialisé, vous ne devez constater aucune différence avec ce que vous avez l'habitude d'utiliser. Remontez alors le stockage USB et recopiez le dossier nandroid en local pour disposer à l'abris d'une copie de votre système.

Utiliser une application évoluée

L'une des raisons nécessitant le rootage du terminal est l'utilisation d'application qui ne saurait vivre sans les droits root. A titre d'exemple, prenons l'excellent serveur VNC pour android disponible sur le market. Cette application utilisant un accès direct au données de l'écran (framebuffer) ne saurait fonctionner sans les droits root. Du coup, dés que vous la lancez, elle commence par faire appel à la commande SU impliquant une autorisation d'accès de votre part. Si sur le market vous cherchez les mots clefs "root only", vous verrez que de nombreuses applications sont dans ce cas (partage de connexion 3G, serveur FTP, gadget d'activation, sniffer de packet, etc, etc..).

Installation d'une nouvelle ROM

Dans certains cas, la ROM fournie en standard ne nous satisfait pas. C'était par exemple le cas avec mon HTC Hero qui a mis plus d'un an à être mis à jour en Android 2.1. La solution passait alors par le replacement de la ROM d'origine par une version développée par la communauté.

Pour cela nous allons encore utiliser le mode recovery que nous avons installé, et qui est capable de deux choses non encore testées : remettre à zéro le téléphone (aka wipe, littéralement nettoyer), et "flasher" une nouvelle ROM présente sur la carte SD sous la forme d'une archive .zip.

Après, tout le jeu est de trouver la ROM qui vous convient. A titre d'exemple, pour HTC Hero, il y en a des dizaines. Personnellement, j'utilise la CyanogenMod 6.

Pour installer cette nouvelle ROM, rien de plus simple. Il suffit de la télécharger, de la recopier telle-quelle à la racine de la carte SD. Ensuite, vous n'avez plus qu'à redémarrer la machine en mode recovery.

Avant d'installer la nouvelle ROM, il est préférable de reinitialiser systématiquement la machine avec ses réglages usine (attention, vous perdrez toutes vos données, contacts, etc.). Avant d'aller plus loin, vérifiez donc que vous avez fait une sauvegarde complète de votre système (nandroid) et mieux, que vous avez sauvegardé vos données (sms, contacts, etc.) avec un outil comme titanium backup (qui d'ailleurs est intégré à la ROM modaco).

Lorsque vous êtes prêt, vous pouvez redémarrer sur la partition recovery et sélectionner l'option wipe data/factory reset.

Une fois la machine réinitialisée, sélectionnez apply any zip from sd. Là s'affiche la liste des archives .zip présentes à la racine de la carte. Sélectionnez la ModAco que vous venez de télécharger. Après confirmation (bouton home), l'opération commence et va prendre un certain temps. Une fois la copie des données terminée, vous pouvez redémarrer sélectionner dans le menu le redémarrage de l'appareil (reboot system now).

Après un temps de démarrage, vous devez arriver sur votre nouvelle ROM. Comme elle est visuellement identique à celle d'origine, il faut aller jeter un oeil aux applications pour s'en convaincre ;-).

Si l'opération se passe de travers, et que par exemple la machine ne démarre plus correctement, vous avez toujours la possibilité de repasser en mode recovery pour sélectionner l'option restore latest backup. D'où l'importance de faire un nandroid backup avant de commencer.

Conclusion

Voilà, ceci marque la fin du petit tour de piste des étapes nécessaire à ce qu'un appareil que l'on paye 400€ minimum nous appartienne réellement. Il faut être honnête c'est on ne peu plus agaçant. Une autre option est de prendre un terminal plus respectueux de ses acquérreur comme le Geekphone One, mais faut-il encore que les spécifications techniques vous conviennent.