我正在尝试使用 proguard 来删除我的所有日志: 我在 proguard-project.txt 中输入了以下行:
-assumenosideeffects class android.util.Log { *; }
我的project.properties看起来像这样:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
尽管如此,日志仍然显示在我的应用程序中。我到底做错了什么?
您不应指定“*”通配符,因为它包括“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'
}
}
已经很晚了,我也遇到了同样的问题。我正在使用 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(模块: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
这对我有用,希望对其他人有帮助。
你需要这样做:
-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(...);
}
并展开您正在使用的所有日志方法。