Désactiver complètement la sortie LogCat dans l’application Android?

La fermeture de la sortie LogCat de ma propre application avant de lancer une application sur le marché est simple. Je sais aussi comment filtrer sélectivement le message LogCat par tag et / ou par identifiant pour ma propre facilité de débogage.

Mais maintenant, je suis intéressé par quelque chose qui peut être beaucoup plus difficile (peut-être impossible?): Désactiver toutes les sorties de LogCat, y compris celles provenant de services tiers tels que TtsService, GoogleLoginService, etc.

Est-ce possible?

Pour clarifier davantage: je ne suis pas intéressé par le filtrage des messages pour moi-même. Je suis plutôt intéressé par la désactivation des messages tiers pour quiconque télécharge mon application depuis Android Market. Est-ce possible?

Vous pouvez utiliser ProGuard pour supprimer complètement toutes les lignes où une valeur de retour n’est pas utilisée, en indiquant à ProGuard de supposer qu’il n’y aura pas de problèmes.

Le bloc proguard.cfg suivant demande de supprimer les appels Log.d, Log.v et Log.i.

-assumenosideeffects class android.util.Log { public static *** d(...); public static *** w(...); public static *** v(...); public static *** i(...); } 

Le résultat final est que ces lignes de journal ne sont pas dans votre version apk, et par conséquent tout utilisateur avec logcat ne verra pas les journaux d / v / i.

si vous n’utilisez pas proguard, vous devez gérer le journal vous-même et dans le fichier manifeste rendre dubuggable false

  

Voici ma classe de journal personnalisée

 public class Lol { public static final boolean ENABLE_LOG = true & MyApplication.sDebug; private static final boolean DEBUG = true & ENABLE_LOG; private static final boolean VERBOSE = true & ENABLE_LOG; private static final boolean TEMP = true & ENABLE_LOG; private static final boolean WARNING = true & ENABLE_LOG; private static final boolean INFO = true & ENABLE_LOG; private static final boolean ERROR = true & ENABLE_LOG; public static void obvious(Ssortingng tag, Ssortingng msg) { if (DEBUG) { msg = "*********************************\n" + msg + "\n*********************************"; Log.d(tag, msg); } } public static void d(Ssortingng tag, Ssortingng msg) { if (DEBUG) Log.d(tag, msg); } public static void d(boolean bool, Ssortingng tag, Ssortingng msg) { if (TEMP&bool) Log.d(tag, msg); } public static void i(Ssortingng tag, Ssortingng msg) { if (INFO) Log.i(tag, msg); } public static void e(Ssortingng tag, Ssortingng msg) { if (ERROR) Log.e(tag, msg); } public static void e(boolean bool, Ssortingng tag, Ssortingng msg) { if (TEMP&bool) Log.e(tag, msg); } public static void v(Ssortingng tag, Ssortingng msg) { if (VERBOSE) Log.v(tag, msg); } public static void w(Ssortingng tag, Ssortingng msg) { if (WARNING) Log.w(tag, msg); } public static Ssortingng getStackTraceSsortingng(Exception e) { return Log.getStackTraceSsortingng(e); } public static void w(Ssortingng tag, Ssortingng msg, Exception e) { if (WARNING) Log.w(tag, msg,e); } } 

La grande réponse fournie par David Caunt ne semble pas fonctionner pour les règles définies dans proguard-android-optimize.txt .

Au lieu d’utiliser le caractère générique *** , les versions actuelles de ProGuard semblent s’attendre au qualificatif de type du paramètre return:

 -assumenosideeffects class android.util.Log { public static int d(...); public static int w(...); public static int v(...); public static int i(...); public static int wtf(...); } 

Vous pouvez mettre la valeur false pour déboguer sur la version de buildTypes.

 buildTypes { release { debuggable false ... } } 

Dans le jeu de fichiers app build.gradle:

 release { minifyEnabled true …… } 

Dans proguard-rules.pro mettre:

 -assumenosideeffects class android.util.Log { public static *** v(...); public static *** d(...); public static *** i(...); public static *** w(...); public static *** e(...); } -ignorewarnings 

Cela a fonctionné pour moi.

Je fais habituellement ensuite:

if (BuildConfig.DEBUG) Log.i(TAG, msg);

cependant si vous avez beaucoup de dépendances (bibliothèques) et qu’ils écrivent mal alors oui utilisez simplement https://stackoverflow.com/a/5553290/4548520

raccourcir les lignes:

 private final static boolean DEBUG = BuildConfig.DEBUG; if (DEBUG) Log.i(TAG, msg_1); if (DEBUG) Log.e(TAG, msg_error_2);