Débugger les exemples de l’API Android

Publié le 09 mars 2011 par Romainbochet

Dans cette petite astuce qui marque le retour des billets techniques sur ce blog (et des billets en général), je vais vous expliquer brièvement comment fixer un des problèmes pénibles que l'on peut rencontrer lors de l'apprentissage de la programmation avec Android : les exemples fournis dans le SDK ne fonctionnent pas (du moins, pas toujours).

Instantiation de l'exemple

Première surprise, le plugin Android d'Eclipse (ADT), est buggé sous Windows ; il ne permet malheureusement pas de créer de projets basés sur les exemples en utilisant l'utilitaire de création de nouveau projet.

Création de projet basés sur les exemples Android avec le plugin ADT: ça ne marchera pas.

Ce problème peut être contourné facilement ; il suffit en effet de créer un projet à partir de sources existantes, et de pointer ensuite vers le répertoire d'installation du SDK d'Android, suivi du chemin :

<sdk>/samples/android-<level>/

Par exemple, si vous êtes sur Android Froyo (Android 2.2), le "level" de l'API est 8. On peut trouver le détail des level de l'API sur la page dédiée.

Attention : Si vous modifiez l'exemple, il sera modifié directement dans l'espace réservé au SDK, ce qui a deux conséquences :

  1. L'exemple original sera perdu (dommage en cas de mauvaise manipulation) ;
  2. Lors d'une update du SDK, on perd les modifications.

Donc je vous recommande de recopier le dossier sample évoqué ci dessus avant de faire des modifications.

Compilation de l'exemple

Une fois que l'exemple est installé dans Eclipse, il peut ne pas fonctionner immédiatement, ce qui cause toujours l'ire du malheureux débutant qui ne sait plus à quel saint se vouer.

Le problème le plus courant est lié à un fichier nommé R.java ; sans rentrer dans les détails, ce fichier à pour but de fournir un wrapper qui permet d'accéder aux ressources depuis le Java. Le développeur n'a pas à écrire le fichier, il est généré par le plugin. Si vous envisagez vraiment de programmer pour Android, il va falloir passer par la lecture de la page Accessing Resources, qui décrit le concept.

Problème #1  : Eclipse se plaint de l'absence du fichier R.java

Comme ce fichier est généré par Eclipse, il n'apparait pas forcément tout de suite dans le dossier "gen" de votre application, causant des troubles à Eclipse qui veut construire le projet en permanence. Comme il y a des erreurs dans certains fichiers, la génération de fichier n'est pas systématiquement lancée, on se retrouve donc dans un cas assez gênant, mais fort heureusement bénin : il suffit d'attendre et de faire Project > Clean pour forcer la reconstruction.

Problème #2 : Eclipse se plaint de l'absence du fichier R.java (+ 2 minutes)

C'est plus sérieux... Deux problèmes sont candidats

  1. Eclipse a essayé de résoudre automatiquement R.java ; chercher et supprimer les lignes du genre
    import android.R dans tout le projet.
  2. Les exemples proviennent d'une époque ou AAPT était moins strict ; aussi quelques petites erreurs ne passent elles plus dans les fichiers XML, et notamment dans les caractères de formatage des strings. Il s'agit simplement de remplacer tous les caractères "%" par "%%".
    On peut citer l'exemple Wikitionnary où le fichier de base comprend le passage suivant :
    Et doit être remplacé par :

Amusez-vous bien, et n'hésitez pas à partager vos astuces, j'en aurais peut-être moi même besoin dans un proche avenir...