Удаление вызова журнала с помощью proguard - программирование
Подтвердить что ты не робот

Удаление вызова журнала с помощью proguard

Я пытаюсь использовать proguard для удаления всех моих журналов: Я ввел следующую строку в свой proguard-project.txt:

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

И мои project.properties выглядят так:

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

Несмотря на это, журналы продолжают отображаться в моем приложении. Что именно я делаю неправильно здесь?

4b9b3361

Ответ 1

Вы не должны указывать шаблон '*', потому что это включает в себя такие методы, как "Object # wait()". Лучше явным образом перечислить методы:

-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(...);
}

Эта опция применима только в том случае, если оптимизация не отключена, например, в proguard-android.txt. Вместо этого нужно указать proguard-android-optimize.txt:

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

или с современным Android Gradle плагин

buildTypes {
    releaseSomeBuildType {
        ...
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'your-proguard-file.pro'
    }
}   

Ответ 2

Это довольно поздно, и я столкнулся с той же проблемой. Я использую Android studio 1.3, и это то, что я сделал.

  • Добавьте методы журнала, которые вы хотите разбить в своей сборке релизов, в 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(...);
    }
    
  • В вашем build.gradle(Module: app) установите proguard-android-optimize.txt как файл proguard по умолчанию вместо proguard-android.txt:

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

Это связано с тем, что в proguard-android.txt оптимизация по умолчанию отключена флагами

-dontoptimize
-dontpreverify 

Это сработало для меня, надеюсь, что это поможет другим.

Ответ 3

Вам нужно сделать это следующим образом:

-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(...);
    }

и разверните все методы журнала, которые вы используете.