Tous les développeurs Android (sauf ceux qui programment si bien qu'ils n'ont pas besoin de faire de débogage) sont un jour confrontés à Logcat, l'afficheur gestionnaire de logs d'Android qui permet d'avoir des retours sous forme de texte lors que l'on programme une application.
Le fonctionnement est similaire au System.{out,err}.println()
, sauf qu'il est un peu plus sophistiqué et permet par exemple de définir des niveaux de verbosité et des "tags" qui permettent de filtrer plus finement tout ce qui nous intéresse parmi tous les éléments envoyés par le téléphone.
Si vous utilisez Eclipse pour programmer, vous avez surement installé le plugin ADT, qui permet d'utiliser les outils de Google de manière intégrée (et très pratique). Une des vues d'Eclipse permet d'afficher les messages et de mettre en place des filtres (aussi bien sur les tags que sur les niveaux de verbosité et les PID des applications).
Problème
La stabilité de Logcat dans Eclipse est… discutable. En effet, de temps en temps, Logcat ne fonctionne tout simplement plus (aucune sortie de nouveaux événements) sans cause visible apparentes, et le redémarrage du périphérique donne exactement les mêmes symptômes à coup sur.
Sachant que la seule solution pour retrouver ses logs est de relancer Eclipse, avec ce que çs implique en terme de temps perdu et de changement de contexte dans l'esprit du programmeur, le cout résultant est assez élevé.
Solution
Use the shell ! On peut utiliser la commande adb logcat
quand un device est connecté pour afficher les évenements en cours. Par défaut, la verbosité est à V, c'est-à-dire qu'il affiche la majorité des messages. On peut utiliser les options pour arrive a un comportement similaire a celui dans Eclipse.
Un bon résumé de ce que l'on peut faire est disponible sur Switch Your Coding Life.
Jetez aussi un œil a cette documentation extensive de Logcat (utile lorsque l'on commence a mixer tags et priorités).
Bonus : l'option cachée de logcat
!
La documentation Google n'est pas très bavarde sur Logcat, et j'aurais aimé trouver des informations plus précises sur le fonctionnent de cet outil. Sachant qu'Android est Open Source, j'ai cherché un peu avant de trouver l'implémentation (visible ici).
Je n'ai rien trouvé de transcendant, mis a part une option "cachée" qui permet d'utiliser Logcat pour l'émulateur, avec l'argument "Q".
Assez amusant pour que je reproduise ici la partie de code incriminée :