我的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 ...
}
}
知道什么是错的以及如何解决这个问题?
由于
答案 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行,会发生什么?