Outils pour utilisateurs

Outils du site


dev:android:generation-des-logs

Générer des logs

Sous Android Studio, logcat permet de visualiser les logs générés par le système ou les applications. Pour générer des messages depuis l'application quelques étapes sont nécessaires:

Configuration

Sur les émulateurs cette fonction est active par défaut, par contre sur un périphérique physique, pour que le débogage puisse être utilisé, il faut qu'il soit activé:

  • Paramètres → Options pour développeurs → section Débogage → Débogage USB
Le fichier Gradle construit une version de débogage de l'application, c'est cette version qui sera utilisée sur le périphérique ou l'émulateur.

Logcat permet de visualiser l'ensemble des logs, il est par conséquent très verbeux, il faut s'appuyer sur le système de filtre pour ne conserver que les messages concernant l'application.

Les logs ont le format suivant:

[date] [heure] [PID-TID/package] [sévérité/tag] [message]

Écriture de logs

Pour pouvoir générer des logs visibles sous Logcat, il faudra importer la classe Log:

import android.util.Log;

Plusieurs niveaux de sévérité existent, pour chacun correspond une méthode:

verbose Log.v(tag, message)
debug Log.d(tag, message)
info Log.i(tag, message)
warning Log.w(tag, message)
error Log.e(tag, message)

Lecture via adb

adb permet également d'afficher les logs, de nombreuses options existent:

$ adb logcat

Pour n'afficher que les sévérités à partir de erreur:

$ adb logcat *:E

Pour visualiser le buffer contenant les messages relatifs aux évènements (plutôt que le main par défaut):

$ adb logcat -b event

Pour visualiser le buffer contenant les messages relatifs à la téléphonie (plutôt que le main par défaut):

$ adb logcat -b radio

Analyse des logs

En cas d'erreur les logs enregistrent les levées d' exceptions notamment les stack traces ou piles d'appels. Quelques causes usuelles:

NullPointerException

Certainement l'erreur la plus emblématique de Java, qui signifie que l'on essaie d'utiliser une variable null.

Solution : vérifier la nullité d'une variable avant de l'utiliser.

ActivityNotFoundException

Cette erreur intervient quand on essaie d'appeler une activité via startActivity(), mais que cette activity n'est pas déclarée dans le manifest.

Solution : déclarer l'activity dans le manifest.

ClassCastException

Cette erreur survient quand on essaie de lancer un objet dans une instance d'objet inappropriée. Par exemple lancer un TextView en View est tout à fait valide. En revanche lancer un TextView en Integer va provoquer une erreur.

Solution : toujours lancer dans le bon type.

NetworkOnMainThreadException

Dans Android, il est formellement interdit de créer une requête réseau sur le threadUI. Si vous le faites, vous recevrez cette erreur.

Solution : faire les requêtes réseau dans une asynctask ou dans un thread à part.

Activity Has Leaked Window That Was Originally Added Here

Cette erreur survient très souvent quand on essaie d'afficher un dialogue après avoir quitté l'activité à laquelle il est lié.

Solution : toujours détruire les dialog dans onPause() ou onDestroy().

Références

dev/android/generation-des-logs.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1