Android : contribuer au code en ligne de commande, application à Mirakel

android-vim.png Nous allons voir dans ce billet qu’il est facile de contribuer à du code pour des applications pour téléphone mobile sous système Android.

Android est un système d’exploitation basé sur un noyau Linux. Il a été créé par Google pour les téléphones et appareils mobiles. Si le système Android n’est pas totalement libre - certaines parties ne sont pas diffusées par Google, il l’est suffisamment pour avoir vu naître des distributions libres qui en assure la pérennité. Il existe actuellement un grand nombre d’applications libres pour Android.
L’intérêt des logiciels libres est d’avoir accès au code source des applications, on peut ainsi étudier la “recette de cuisine”, la modifier ou mieux encore corriger les éventuels problèmes.

Je ne vais pas ici vous apprendre à développer pour Android. En effet vous trouverez rapidement un grand nombre de documentation et de tutoriels en ligne. Cependant, de façon générale, l’écriture de l’application est réalisée avec environnement de développement intégré (IDE) Eclipse puis l’application est distribué dans le Play Store de Google. Nous allons voir dans ce billet que l’on peut très bien se passer d’Eclipse et du Play Store.

En effet, Eclipse, même s’il s’agit également d’un très bon logiciel libre, est très exigeant en ressource mémoire. Il nécessite une machine de développement assez puissante et une interface graphique. Si l’on veut juste corriger quelques lignes d’un logiciel, nous allons voir que le développement peut être réalisé à partir d’un serveur qui ne dispose pas d’interface graphique.

Pour commencer, nous avons besoin d’installer un environnement de développement sur le serveur. Une application Android est généralement écrite en Java, nous avons alors besoin d’un Java Development Kit (JDK). La version d’OpenJDK 7 fournie par votre distribution est en théorie suffisante. Cependant si vous rencontrez des problèmes, vous aurez alors besoin d’une version du java 7 officiel d’Oracle ou pour un serveur un peu plus vieux le Java 6 de Sun : apt-get install sun-java6-sdk

Nous avons ensuite besoin du kit de développement (SDK) pour Android. Il existe un très bon script android-sdk-installer qui permet de simplifier et d’automatiser le choix des paquets à télécharger. Pour conserver les outils strictement nécessaires, vous pouvez éviter d’installer le plugin pour Eclipse ou le support de MTP.

Si vous avez installé le SDK Android dans /opt on peut alors positionner les variables environnement par défaut dans ~/.bashrc

export ANDROID_HOME=/opt/android-sdk-linux
PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/platforms

$ source ~/.bashrc

Nous avons ensuite accès à la commande android qui va nous permettre d’installer les API de développements. Ci dessous l’API 19 qui correspond à la dernière version de Android 4.4 ( KITKAT )

$ android update sdk --no-ui --filter platform-tools,android-19,extra-android-support

Voilà notre environnement de développement est prêt à être utilisé.

Il ne reste plus qu’à récupérer le code source de l’application qui nous intéresse.

mirakelJe cherchais depuis quelques temps un gestionnaire de listes TODO sur mon téléphone mobile qui se synchronise avec mes autres machines de bureau, portables, maison, …

taskwarior.jpgJ’ai trouvé le très bon Mirakel qui permet de se synchroniser avec Taskwarrior.

Après avoir corrigé quelques erreurs dans le code C++ du serveur taskd, je me suis attaqué à la corrections des erreurs de Mirakel.

L’application aLogcat installé depuis le dépôt de logiciel F-Droid m’a permis d’identifier assez facilement ces erreurs.

Pour commencer, il faut récupérer le code disponible sur github de Mirakel.
$ git clone https://github.com/azapps/mirakel-android.git
dans le dossier mirakel-android, nous allons mettre à jour les informations de compilations
$ android update project -p . --subprojects -t 1
l’option -t 1, correspond à la cible (target) 1 : l’API 19 de notre environnement

La commande :
$ android list targets
permet d’obtenir les cibles disponibles.

L’éditeur VIM, disponible sur toute machine UNIX, et un plugin comme NERDTree permet de facilement naviguer parmi les fichiers sources et d’effectuer les corrections du code dans un terminal sans environnement graphique.

Il suffit ensuite de compiler l’application avec la commande :
$ ant clean debug

la compilation en mode debug permet d’obtenir plus de messages d’erreurs dans aLogcat.

À la fin de la compilation vous obtenez un fichier Mirakel-debug.apk dans bin/ que vous pouvez installer sur votre téléphone, après l’avoir envoyé par mail ou téléchargé par le serveur HTTP de votre serveur.

Naturellement, il faut être attentif d’utiliser la branche de développement du logiciel à corriger et vérifier que le problème n’y pas été déjà corrigé. Il faut souvent également signaler le bug dans le système de ticket (issue). Ainsi lorsque vous soumettez vos corrections, les auteurs peuvent consulter la référence au bug et éventuellement le fermer si vos corrections sont acceptées.

Il faut bien entendu diffuser ses corrections aux auteurs si l’on veut qu’elles soient intégrées dans le prochaines améliorations des applications, vous en deviendrez ainsi partiellement l’auteur.

En complément, si vous ne développez pas continuellement avec Eclipse et que la mémoire de votre machine de bureau vous est précieuse, vous pouvez développer de la même façon vos applications Android avec VIM. Cependant vous aurez besoin d’un émulateur (AVD) pour tester diverses résolutions graphiques ou appareils qui ne sont pas forcément à votre disposition.

La commande $ android permet alors dans une interface graphique de gérer les paquets disponibles.

Si votre machine est à base de processeur Intel, il est recommandé d’installer une image pour processeur Intel : “Intel x86 Atom Image”. L’émulateur sera plus rapide puisqu’il n’aura pas besoin de modifier les instructions pour processeur ARM en instruction pour processeur Intel.

Vous pouvez ensuite gérer des images d’émulateurs à partir du menu “> Tools > Manage AVDs”

Vous pouvez par exemple définir un émulateur nommé “test1” à la résolution graphique qui vous intéresse, à base de processeur X86 avec accès à une SDCARD et des capacités de snapshot pour éviter de redémarrer totalement l’appareil.

Il suffit alors de lancer l’émulateur avec :

$ emulator @test1

Si l’émulateur ne se lance vérifier l’espace disponible dans /tm/

La commande adb permet d’installer des applications ou déposer des fichiers :

$ adb install ../FDroid.apk
$ adb push yves.txt /sdcard/yves.txt
$ adb install -r ./bin/Mirakel-debug.apk

ou encore de visualiser les logs :
$ adb shell logcat -d -v time

Vous pouvez encore accéder directement au contenu d’une base de donnée de l’émulateur comme dans l’exemple ci-dessous

$ adb shell
# cd /data/data/de.azapps.mirakelandroid/databases
# sqlite3 mirakel.db
sqlite> .tables
sqlite> .schema
sqlite> SELECT * from tasks;
sqlite> .exit

Ce billet n’est pas un tutoriel pour développer sous Android mais j’espère qu’il vous donnera quelques pistes pour éventuellement vous y intéresser ou contribuer à des applications libres.