1

我用

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

4

2 回答 2

0

如果启用了 proguard 优化,这是相关的,即您的 proguard.config 是这样的

proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
于 2015-01-28T09:36:32.860 回答
0

只是为了澄清起见,我的理解是“必须”启用优化才能剥离日志调用。

您可以尝试使用 Log 包装器类(例如这个)来包装android.util.Log. 由于 Eric(又名 Proguard 先生)在这个答案中关于 Proguard 如何检查代码的说明,我使用了这种方法。所以这最终以一个更简单的调用Log.d(tag, string)而不是 Log.d(tag, string + value+ String)

或者使用 DexGuard IIRC 具有一些明确的日志删除功能。-- [更新:对不起,我的错,这不是一个明确的功能,DexGuard 使用与您提到的相同的配置。我想我在想反编译的代码更容易被 DexGuard 破坏。]

于 2015-01-28T16:50:06.910 回答