2016-09-04 4 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.** 

로그 캣 출력에서 ​​몇 줄 (내 소스 파일이 100 개 라인 이상 동안 오류 행 번호가 1133로 표시되어 있습니다)

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

고마워요! 너는 내가 필요한 것을 정확히 도왔다. –

관련 문제