Proguard не сохраняет номера строк и имена методов в трассировке стека.

Вот несколько строк с 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)

Я сохраняю номера строк и атрибуты исходного файла, но трассировка стека по-прежнему запутана. Что я делаю не так?


person mobileDev    schedule 04.09.2016    source источник


Ответы (1)


Насколько я знаю, невозможно запутать код и получить исходные трассировки стека. Поэтому, если вы хотите увидеть исходные имена методов и классов в трассировке стека, вам нужно добавить правило -dontobfuscate.

Но вам на самом деле не нужна исходная трассировка стека.

Вы используете -keepattributes SourceFile,LineNumberTable, и это позволяет вам однозначно отслеживать трассировку стека. Только не забудьте сохранить сгенерированный файл mapping.txt.

Кроме того, если вы удалите -renamesourcefileattribute SourceFile, вы увидите исходные имена файлов в скобках. Номер строки уже есть, поэтому вы сможете выяснить, не отслеживая, где на самом деле произошло исключение.

person Tomik    schedule 06.09.2016
comment
Спасибо! Вы помогли мне именно в том, что мне было нужно. - person David Vávra; 20.01.2017