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