我用
-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(...);
public static java.lang.String getStackTraceString(java.lang.Throwable);
}
然而,当我反编译时,我看到我在反编译的jar文件中的Log.d行中使用的唯一自定义字符串。怎么可能呢?不是Proguard完全删除了Log.d行吗?
答案 0 :(得分:0)
如果启用了proguard优化,那么这是相关的,即你的proguard.config就是这个
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
答案 1 :(得分:0)
只是为了澄清,我的理解优化'有'已被启用以便剥离日志调用。
您可以尝试使用日志包装器类(like this one)来包装android.util.Log
。由于Eric(a.k.a Mr Proguard先生)在answer中关于Proguard如何检查代码的说明,我使用了这种方法。因此,最终只需更简单地调用Log.d(tag, string)
而不是Log.d(tag, string + value+ String)
或者使用DexGuard IIRC有一些明确的日志删除功能。 - [ 更新: 抱歉,我的不好,它不是显式功能 DexGuard使用与您提到的相同的配置。我想我正在考虑使用DexGuard对反编译代码进行更多修改的事实。]