Как отлаживать с запутанными (с ProGuard) приложениями на Android? - PullRequest
66 голосов
/ 12 октября 2010

Когда я получил что-то вроде этого

ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677):     at com.companyname.a.a.a(Unknown Source)

Как я могу узнать, в чем проблема, и устранить ее?Я только получил отображение сопоставления от ProGuard и не знаю номер строки.Спасибо.

Ответы [ 4 ]

111 голосов
/ 12 июля 2011

Добавьте следующие строки в конфигурацию Proguard.

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

Теперь ваши трассировки стека будут включать номера строк, и с помощью инструмента восстановления, который поставляется с Proguard (входит в Android SDK), вывозможность отладки как обычно.

Обратите внимание, что даже если вы не использовали эти два параметра конфигурации, обратная трассировка все равно может выводить полезную информацию, если у вас есть файл сопоставлений, хотя и не полностью однозначно.Примечание. Файл с сопоставлениями создается с помощью параметра конфигурации proguard:

 -printmapping outputfile.txt

В файле ant, поставляемом с Android SDK, для него установлен файл mapping.txt.

Удачи.

15 голосов
/ 13 октября 2010

Чтобы использовать любые трассировки стека из вашей учетной записи Android Market, вы можете использовать файл карты, созданный с помощью опции -printmapping в конфигурации ProGuard, с ReTrace (вспомогательный инструмент ProGuard) для декодирования трассировки стека.Вы также можете декодировать вручную, используя содержимое файла карты, но это утомительно.

В Руководстве по ProGuard, приведенном ниже в примерах, есть раздел о создании полезных запутанных трассировок стека, включая способы сохранения номеров строк.1004 *

К сожалению, если вы не настроили ProGuard для сохранения номеров строк, вы сможете определить только метод, который вызывает исключение.

4 голосов
/ 05 августа 2015

Вставьте трассировку стека в stack_trace.txt

Выполните следующую команду: java -jar retrace.jar classes-processed.map stack_trace.txt

retrace.jar находится в sdk \ tools \ proguard \ lib \ retrace.jar classes-processed.map - выходной файл, сгенерированный proguard при запутывании

0 голосов
/ 25 февраля 2019

Вот ссылка на официальную документацию по инструменту восстановления из Android SDK: https://developer.android.com/studio/build/shrink-code#decode-stack-trace

Эта статья тоже хороша: https://medium.com/@maheshwar.ligade/de-obfuscate-stack-traces-6e19a52a3379

Для всех, кто вы копируете и вставляете:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
...