我正在尝试使用proguard来删除所有日志: 我在proguard-project.txt中输入了以下行:
-assumenosideeffects class android.util.Log { *; }
我的project.properties看起来像这样:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
尽管如此,日志仍继续显示在我的申请中。我到底错在了什么?
答案 0 :(得分:89)
您不应指定'*'通配符,因为它包含'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
buildTypes {
releaseSomeBuildType {
...
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'your-proguard-file.pro'
}
}
答案 1 :(得分:12)
现在已经很晚了,我遇到了同样的问题。我正在使用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
这对我有用,希望它能帮助别人。
答案 2 :(得分:6)
你需要这样做:
-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(...);
}
并展开您正在使用的所有日志方法。