Proguard не сохраняет номера строк и имена методов в stacktrace
Вот несколько строк из proguard-rules.pro
-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)
Я сохраняю номера строк и атрибуты исходного файла, но трассировка стека все еще запутана. Что я делаю неправильно?
1 ответ
AFAIK невозможно скрыть код и иметь оригинальные следы стека. Поэтому, если вы хотите увидеть оригинальные имена методов и классов в трассировке стека, вы должны добавить -dontobfuscate
править.
Но вам на самом деле не нужна оригинальная трассировка стека.
Ты используешь -keepattributes SourceFile,LineNumberTable
и это позволяет вам однозначно восстановить трассировку стека. Только не забудьте сохранить сгенерированный mapping.txt
файл.
Более того, если вы удалите -renamesourcefileattribute SourceFile
вы увидите исходные имена файлов в скобках. Номер строки уже там, так что вы должны быть в состоянии выяснить, не восстанавливая, где на самом деле произошло исключение.