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 вы увидите исходные имена файлов в скобках. Номер строки уже там, так что вы должны быть в состоянии выяснить, не восстанавливая, где на самом деле произошло исключение.

Другие вопросы по тегам