在剥离Log语句之后,Proguard不会剥离未使用的生成变量

时间:2016-10-24 17:02:29

标签: android proguard android-proguard android-log

我创建了一个包装器类MyLog来为我的Android应用程序进行日志记录,它基本上只包装android.util.Log。我希望在我的发布应用程序中完全消失日志记录。我在proguard文件中定义了以下规则:

-assumenosideeffects class com.myapp.logging.MyLog {
    public static void d(...);
}

我看到具有日志语句的行如下:

MyLog.d("Logging a boolean %b and a string %s parameter", isTrue, stringName);

正缩小为:

Object[] objArr = new Object[]{Boolean.valueOf(z), str};

和带有日志语句的行如下:

MyLog.d("function call result: " + foo() + " end");

缩小为:

new Object[1][0] = foo();

在这两种情况下,混淆的剩余物都是无用的,可能也应该被删除。

问题:

  1. 为什么proguard会在上面的示例#1中留下未使用的变量?
  2. 有没有更好的方法告诉proguard - “当您删除此方法声明及其任何调用时,假设没有副作用,以及传递的参数”?
  3. 我已阅读与该主题相关的其他答案,最接近的答案为here。我不是在寻找使用BuildConfig.IS_LOGGING_ENABLED类型解决方案的解决方案,其中每个日志语句都应该用此检查包装。

0 个答案:

没有答案