La vie est belle, vous développez une nouvelle application mobile. Vous ajoutez une nouvelle fonctionnalité, et vous avez envie de la tester. Pour vous assurer que tout fonctionne correctement, vous souhaitez faire parler votre application. C'est-à-dire qu'elle puisse vous dire où elle en est, et vérifier si les traitements effectués sont corrects. Par exemple :
la nouvelle activité a été lancée ;
le fichier a été téléchargé ;
les préférences ont été mises à jour.
Dans ce chapitre, nous allons découvrir les outils mis à disposition par Android pour gérer les traces (ou logs, en anglais). Pour y parvenir, nous utiliserons une application de test. Je vous invite donc à télécharger le code source de l'application MemeTastic. Elle vous permettra de créer vos propres meme !
Activez le mode développeur pour tester votre application
Si vous utilisez un équipement réel pour tester votre application, il est probable que vous deviez activer le mode Developer. Pour ce faire, je vous invite à effectuer la manipulation suivante sur votre tablette ou votre téléphone :
ouvrez l'application Paramètres (ou Settings, en anglais) ;
si vous êtes sur Android 8.0 uniquement : sélectionnez Système (ou System, en anglais) ;
tout en bas, cliquez sur À propos du téléphone (ou About device, en anglais) ;
tout en bas, appuyez sept fois sur Numéro de build (ou Build number, en anglais). Non, ce n'est pas une blague ;
revenez à l'écran précédent, et cliquez sur Options pour les développeurs (Developer options, en anglais) ;
activez l'option Débogage USB (ou USB debugging, en anglais).
Pour plus d'information, n'hésitez pas à consulter cette page.
Utilisez des outils pour gérer vos traces
Pour générer des traces et les afficher, Android propose l'utilitaire Logcat. Ce programme se lance en ligne de commande et permet d'accéder à l'ensemble des traces générées par le système. À l’aide de la classe Java Log (cette classe fait partie du SDK Android), on a la possibilité de demander au système d'afficher une trace dans le Logcat.
Accédez aux traces grâce à l'utilitaire Logcat
Voyons tout d'abord comment accéder aux traces. L'outil standard pour accéder aux traces d'Android s'appelle Logcat. C'est un utilitaire qui se lance en ligne de commande, de deux façons différentes :
soit via la commande adb ;
soit en ouvrant un shell sur l'émulateur ou sur l'équipement, puis en invoquant la commande logcat.
Cette méthode d'accès est intéressante si vous êtes un fan de la ligne de commande. Dans ce cas, je vous invite à lire la documentation d'adb.
Dans le cadre de ce cours, nous allons utiliser une méthode plus simple : la consultation des traces via Android Studio. Android Studio appelle automatiquement la commande logcat à notre place et nous en affiche le contenu.
Pour accéder à la fenêtre des traces, rendez-vous dans Android Studio, puis :
Cliquez en bas sur le bouton Logcat dans la liste des onglets.
Admirez ci-dessous le contenu de la fenêtre avec vos yeux ébahis.
Si vous avez un équipement branché et un émulateur lancé, vous verrez apparaître les deux dans la liste des équipements. Assurez-vous de sélectionner le bon, suivant la cible sur laquelle vous souhaitez lancer votre application :
Lorsque vous lancez l'application, vous devez voir apparaître le processus correspondant à côté de la cible (l'émulateur ou l'équipement réel). Si ce n'est pas le cas, sélectionnez-le :
Voilà, vous avez toutes les traces émises par l'application sous les yeux. Voici un exemple de trace :
09-28 01:43:33.321 13801-13801/io.github.gsantner.memetastic I/InstantRun: starting instant run server: is main process
Chaque trace est représentée suivant le même format :
La date d'enregistrement de la trace, sous la forme mois-jour.
L'heure d'enregistrement de la trace, sous la forme heures:minutes:secondes.millisecondes.
L'identifiant du processus, suivi de l'identifiant du thread, suivi de l'identifiant de l'application, sous la forme id_processus-id_thread/id_app.
Le niveau de priorité de la trace, suivi d'un tag, sous la forme priorité/tag:.
L'information tracée.
La date, l'heure et les identifiants sont automatiquement générés par le système. Le reste est déterminé par le développeur, comme nous allons le voir ci-dessous.
Générez une classe grâce à la classe Log
Pour générer une classe depuis le code de notre application, il faut utiliser la classe Log. La méthode standard de trace est la suivante :
int println(int priority, String tag, String msg);
Le premier paramètre correspond au niveau de sévérité de la trace. Les différentes valeurs possibles sont :
VERBOSE : pour tracer des informations très triviales, comme la valeur d'une variable ;
DEBUG : pour tracer des informations utiles en phase de développement, comme le résultat d'un calcul ;
INFO : pour tracer une information d'usage courant, comme le téléchargement réussi des données de l'utilisateur ;
WARN : pour tracer un problème non bloquant, comme la perte temporaire de connectivité ;
ERROR : pour tracer un problème bloquant, comme un serveur inaccessible ;
ASSERT : pour tracer un problème inattendu, comme le débarquement d’extraterrestres sur Terre.
Le deuxième paramètre correspond au contexte de la trace. C'est une chaîne de caractères. Vous êtes libre de préciser ce que vous voulez. Généralement, le développeur précise le nom de la classe pour se repérer facilement dans la lecture des traces. Mais nous verrons un peu plus loin que ce n'est pas toujours l'information la plus pertinente à mettre.
Le troisième paramètre correspond au texte que vous souhaitez afficher. Vous êtes libre d'afficher les informations que vous voulez, éventuellement avec des paramètres complémentaires (la valeur d'une variable, par exemple).
Sachant que vous avez été très attentif, vous vous dites : Chic, je vais tracer un événement majeur avec la méthode suivante :
Log.println(Log.WARN, "MainActivity", "All the cookies have been eaten by " + culpritName);
En fait, pas du tout ! 😅 Vous pourriez effectivement appeler la méthode println(), mais Android vous facilite la tâche en vous proposant une méthode spécifique pour chaque niveau de sévérité de trace. Vous allez donc utiliser les méthodes suivantes :
Niveau | Méthode |
VERBOSE | v(String tag, String message) |
DEBUG | d(String tag, String message) |
INFO | i(String tag, String message) |
WARN | w(String tag, String message) |
ERROR | e(String tag, String message) |
ASSERT | wtf(String tag, String message) |
Voici quelques exemples d'appel aux différentes méthodes de traces :
Log.d("MainActivity", "Entering onCreate()"); Log.i("MainActivity", "User preferences saved successfully"); Log.e("MainActivity", "User is not authenticated!");
En résumé
Pour développer des applications sur un équipement réel, vous devez passer en mode Développeur.
Le Logcat est un programme en ligne de commande, et vous permet d’accéder à toutes les traces du système.
La classe Log permet de créer vos propres traces dans le Logcat.
Il existe différents niveaux de sévérité pour afficher une trace (WARNING, DEBUG, ERROR…).
Maintenant que vous avez fait vos premiers pas dans la gestion des traces, suivez-moi dans le chapitre suivant pour personnaliser votre système !