Удаление вызова журнала с помощью proguard
Я пытаюсь использовать proguard для удаления всех моих журналов:
Я ввел следующую строку в свой proguard-project.txt:
-assumenosideeffects class android.util.Log { *; }
И мои project.properties выглядят так:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
Несмотря на это, журналы продолжают отображаться в моем приложении. Что именно я делаю неправильно здесь?
Ответы
Ответ 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(...);
}
и разверните все методы журнала, которые вы используете.