web-dev-qa-db-fra.com

Suppression de l'appel de journal à l'aide de proguard

J'essaie d'utiliser proguard pour supprimer tous mes journaux: j'ai entré la ligne suivante dans mon proguard-project.txt:

-assumenosideeffects class Android.util.Log { *; }

Et mon project.properties ressemble à ceci:

proguard.config=${sdk.dir}/tools/proguard/proguard-Android.txt:proguard-project.txt

Malgré cela, les journaux continuent de s'afficher dans mon application. Qu'est-ce que je fais exactement de mal ici?

38
user1667307

Vous ne devez pas spécifier le caractère générique '*', car cela inclut des méthodes comme 'Object # wait ()'. Mieux énumérer explicitement les méthodes:

-assumenosideeffects class Android.util.Log {
    public static boolean isLoggable(Java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

Cette option n'est pertinente que si l'optimisation n'est pas désactivée, comme dans proguard-Android.txt. Vous devez spécifier proguard-Android-optimize.txt au lieu:

proguard.config=${sdk.dir}/tools/proguard/proguard-Android-optimize.txt:proguard-project.txt

ou avec le contemporain plugin Android Gradle

buildTypes {
    releaseSomeBuildType {
        ...
        proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'your-proguard-file.pro'
    }
}   
89
Eric Lafortune

Il est assez tard et j'ai rencontré le même problème. J'utilise Android studio 1.3 et c'est ce que j'ai fait.

  1. Ajoutez les méthodes de journal que vous souhaitez supprimer dans votre build de version dans proguard-Android-optimize.txt:

    -assumenosideeffects class Android.util.Log {
        public static boolean isLoggable(Java.lang.String, int);
        public static int d(...);
        public static int w(...);
        public static int v(...);
        public static int i(...);
    }
    
  2. Dans votre build.gradle (Module: app), définissez proguard-Android-Optimize.txt comme fichier proguard par défaut au lieu de proguard-Android.txt:

    buildTypes {
        release {
            minifyEnabled true
            debuggable false
            proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt')
        }
    }
    

En effet, dans proguard-Android.txt l'optimisation est désactivée par défaut avec des drapeaux

-dontoptimize
-dontpreverify 

Cela a fonctionné pour moi, j'espère que cela aide les autres.

12
arshiya

Vous devez le faire comme ceci:

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

et développez pour toutes les méthodes de journal que vous utilisez.

6
Frank