使用proguard删除日志通话
我正在尝试使用proguard去除所有的日志:我在我的proguard-project.txt文件中input了以下行:
-assumenosideeffects class android.util.Log { *; }
而我的project.properties看起来像这样:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
尽pipe如此,日志仍然显示在我的应用程序。 我在这里做错了什么?
你不应该指定'*'通配符,因为它包括像'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.txt
,就像在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(模块:应用程序)设置proguard-android-optimize.txt作为默认proguard文件,而不是proguard-android.txt:
buildTypes { release { minifyEnabled true debuggable false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') } }
这是因为在proguard-android.txt
,默认情况下使用标志closures优化
-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(...); }
并展开您正在使用的所有日志方法。