Proguard不会删除内部类中的Log.d?

时间:2015-01-28 08:17:32

标签: java android proguard dexguard

我用

-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行吗?

2 个答案:

答案 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对反编译代码进行更多修改的事实。]