在使用Proguard之前:
Throwable().getStackTrace()[0].getLineNumber();
我知道了
482
在Proguard之后,我得到了:
41
显然是错误的。
以下是测试解决此问题的规则:
-keep class java.lang.StackElement
-keepattributes StackTraceElement
-keepattributes SourceFile,LineNumberTable
-keepattributes Signature
-keepattributes InnerClasses,EnclosingMethod
-keepattributes getStackTrace
但是它不起作用。是否有任何特定的规则可以使这段代码正常工作?
答案 0 :(得分:0)
根据the manual,您需要执行以下操作:
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
,您需要使用-printmapping
保存映射,以便随后可以对混淆的堆栈跟踪进行解码。
我应该指出,对标准类库中类和方法的引用将始终保留,因为在加载代码时需要使用它们。因此,此“ -keep”是多余的:
-keep class java.lang.StackElement
并且您还告诉Proguard保留不存在的名为“ StackTraceElement”和“ getStackTrace”的属性。支持的属性列表记录在here
中另请参阅: