Je trouve qu'une solution beaucoup plus facile est de simplement oublier tous les vérifications if
partout et d'utiliser simplement ProGuard pour supprimer tous les appels des méthodes Log.d()
ou Log.v()
lorsque nous appelons notre cible Ant release
.
De cette façon, nous avons toujours les informations de débogage affichées pour les constructions régulières et nous n'avons pas à apporter de modifications au code pour les constructions de version. ProGuard peut également effectuer plusieurs passes sur le bytecode pour supprimer d'autres déclarations indésirables, blocs vides et peut automatiquement insérer en ligne des méthodes courtes lorsque c'est approprié.
Par exemple, voici une configuration ProGuard très basique pour Android :
-dontskipnonpubliclibraryclasses
-dontobfuscate
-forceprocessing
-optimizationpasses 5
-keep class * extends android.app.Activity
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
Donc vous enregistrez cela dans un fichier, puis appelez ProGuard depuis Ant, en passant votre JAR fraîchement compilé et le JAR de plateforme Android que vous utilisez.
Voir aussi les exemples dans le manuel de ProGuard.
Mise à jour (4,5 ans plus tard) : De nos jours j'utilise Timber pour les journaux Android.
Non seulement c'est un peu plus agréable que l'implémentation par défaut de Log
— le tag de journalisation est défini automatiquement, et il est facile de journaliser des chaînes formatées et des exceptions — mais vous pouvez également spécifier différents comportements de journalisation à l'exécution.
Dans cet exemple, les déclarations de journalisation ne seront écrites que dans logcat dans les constructions de débogage de mon application :
Timber est configuré dans la méthode onCreate()
de mon Application
:
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
Ensuite, n'importe où ailleurs dans mon code je peux facilement journaliser :
Timber.d("Téléchargement de l'URL : %s", url);
try {
// ...
} catch (IOException ioe) {
Timber.e(ioe, "Des choses mauvaises sont arrivées !");
}
Voir l'application d'exemple de Timber pour un exemple plus avancé, où toutes les déclarations de journalisation sont envoyées à logcat pendant le développement et, en production, aucune déclaration de débogage n'est journalisée, mais les erreurs sont signalées silencieusement à Crashlytics.
2 votes
+1 car je ne me rappelais pas que cela figurait dans la liste de publication.
52 votes
Pour commenter une ligne non bloquée, j'utilise ";//" au lieu de "//".
0 votes
Si vous avez besoin de pouvoir annuler cela, vous voudrez probablement utiliser
sed 's_^\(\s*Journal\.\)_;//'`date|tr -s \ -`'\1_g'
à la place.0 votes
Possible duplicate: stackoverflow.com/q/2018263/2291 Traduction en français : Doublon possible : stackoverflow.com/q/2018263/2291
2 votes
Le lien ajouté par Dimitar ne fonctionne plus. J'ai trouvé ceci à la place source.android.com/source/code-style.html#log-sparingly.
0 votes
C'est pourquoi il n'est pas recommandé d'utiliser l'instruction if sans {}, surtout lorsque vous déplacez l'expression à la ligne suivante; utilisez Sonar Luke.
0 votes
Est-ce qu'il y a des effets sur les performances si la journalisation est activée ou si cette note est uniquement à des fins de sécurité?
1 votes
@mboy : Probablement principalement pour des raisons de performances de nos jours, mais sur d'anciennes versions d'Android, cela a aussi des avantages en termes de sécurité.