proguard bug?删除日志

时间:2015-07-28 10:35:14

标签: android logging proguard

我的proguard配置

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** w(...);
    public static *** v(...);
    public static *** i(...);
    public static *** e(...);
}

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

它确实删除了大部分日志。但是对于某些日志,它会产生奇怪的输出,如下所示。您可以注意到,Log.d已被一些冗余代码所取代。

public void MyFunction(int param1, String param2) {
    Log.d(TAG, "MyFunction: " + param1 + " : " + param2);

    ...some code...
}

这转换为

public final void a(int paramInt, String paramString)
{
new StringBuilder("MyFunction: ").append(paramInt).append(" : ").append(paramString);

... some code ...
}

}

知道什么是错的以及如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

这不是一个错误。您告诉proguard删除Log.d / w / v / i / e方法调用,而不是整行。据我所知,这是你能得到的最好的。 顺便说一下,行new StringBuilder("MyFunction: ")...是对你的类的字节码进行逆向工程的结果,这很好。

我想举例说明为什么proguard只删除方法调用而不是整行。看一下这个片段:

int sum = 0;
int a = 10;
int b = 10;
assert a > 0;
assert b > 0;
Log.d("TAG", "The value of a+b is " + (sum=a+b));
// the sum of two positive number is a positive number
assert sum > 0;

如果proguard删除了Log.d行,会发生什么?