2016-09-04 47 views
3

下面是proguard-rules.proProguard的犯規保留的行號和方法名稱在堆棧跟蹤

-keepattributes *Annotation* 
-keepattributes Signature 
-keepattributes InnerClasses,EnclosingMethod 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 
-keep public class * extends java.lang.Exception 
-dontwarn org.apache.http.** 

logcat的輸出幾行(誤差行數被列爲1133,而我的源文件是100線長)

09-04 16:11:46.698 3827-5280/com.XX.main E/AndroidRuntime: FATAL EXCEPTION: IntentService[ActivityRecognizedTracker] 
Process: com.XX.main, PID: 3827 
java.lang.NullPointerException: Attempt to read from field 'double com.XX.trips.Trip.a' on a null object reference 
at com.XX.ActivityRecognizedTracker.onHandleIntent(SourceFile:1133) 

我保留行號和源文件屬性,但堆棧跟蹤仍然是混淆。我究竟做錯了什麼?

回答

6

AFAIK它是不可能混淆代碼並有原始堆棧跟蹤。所以如果你想在堆棧跟蹤中看到原始的方法和類名,你必須添加-dontobfuscate規則。

但是你並不需要原始的堆棧跟蹤。

您正在使用-keepattributes SourceFile,LineNumberTable並使您能夠unambiguously retrace the stacktrace。只是不要忘記保留生成的mapping.txt文件。

此外,如果您刪除-renamesourcefileattribute SourceFile,您將在圓括號中看到原始文件名。行號已經在那裏了,所以你應該能夠弄清楚,而不必追溯發生異常的地方。

+0

謝謝!你幫助我完全符合我的需求。 –