Désactiver la sortie LogCat COMPLÈTEMENT dans l'application Android?



logcat android studio (5)

Dans l'ensemble de fichiers build.gradle de l'application:

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.

Arrêter 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 id pour mon propre confort de débogage.

Mais maintenant je m'intéresse à 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é à filtrer les messages pour moi-même. Je suis plutôt intéressé par la désactivation des messages de tiers pour ceux qui téléchargent mon application depuis l'Android Market. Est-ce possible?


Je fais habituellement ensuite:

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

mais si vous avez beaucoup de dépendances (bibliothèques) et ils ont écrit mal alors oui, utilisez https://.com/a/5553290/4548520

faire des lignes plus courtes:

private final static boolean DEBUG = BuildConfig.DEBUG;

if (DEBUG) Log.i(TAG, msg_1);

if (DEBUG) Log.e(TAG, msg_error_2);

Vous pouvez mettre false sur la version buildTypes de debuggable.

buildTypes {

     release {
        debuggable false
        ...
     }

}

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

Le fragment proguard.cfg suivant indique 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 vous-même le journal et dans le fichier manifeste make dubuggable false

<application
    android:name="MyApplication"
    android:icon="@drawable/gift"
    android:label="@string/app_name" android:debuggable="@bool/build_log">

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(String tag, String msg) {
        if (DEBUG) {
            msg = "*********************************\n" + msg
                    + "\n*********************************";
            Log.d(tag, msg);
        }
    }

    public static void d(String tag, String msg) {
        if (DEBUG)
            Log.d(tag, msg);
    }

    public static void d(boolean bool, String tag, String msg) {
        if (TEMP&bool)
            Log.d(tag, msg);
    }

    public static void i(String tag, String msg) {
        if (INFO)
            Log.i(tag, msg);
    }

    public static void e(String tag, String msg) {
        if (ERROR)
            Log.e(tag, msg);
    }

    public static void e(boolean bool, String tag, String msg) {
        if (TEMP&bool)
            Log.e(tag, msg);
    }

    public static void v(String tag, String msg) {
        if (VERBOSE)
            Log.v(tag, msg);
    }

    public static void w(String tag, String msg) {
        if (WARNING)
            Log.w(tag, msg);
    }

    public static String getStackTraceString(Exception e) {
        return Log.getStackTraceString(e);
    }

    public static void w(String tag, String msg, Exception e) {
        if (WARNING)
            Log.w(tag, msg,e);
    }
}




android-logcat