由Proguard混淆的Throwable()。getStackTrace()[0] .getLineNumber()

时间:2018-10-29 11:49:20

标签: java android proguard android-proguard

在使用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

但是它不起作用。是否有任何特定的规则可以使这段代码正常工作?

1 个答案:

答案 0 :(得分:0)

根据the manual,您需要执行以下操作:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

,您需要使用-printmapping保存映射,以便随后可以对混淆的堆栈跟踪进行解码。

我应该指出,对标准类库中类和方法的引用将始终保留,因为在加载代码时需要使用它们。因此,此“ -keep”是多余的:

-keep class java.lang.StackElement

并且您还告诉Proguard保留不存在的名为“ StackTraceElement”和“ getStackTrace”的属性。支持的属性列表记录在here

另请参阅: