Как отлаживать с запутанными (с ProGuard) приложениями на Android?
Когда я получил что-то вроде этого
ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677): at com.companyname.a.a.a(Unknown Source)
Как я могу узнать, где проблема и отладить эту проблему?
Я получил только отображение результатов из ProGuard и не знаю номера строки.
Спасибо.
Ответы
Ответ 1
Добавьте следующие строки в конфигурацию proguard.
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
Теперь ваши трассировки стека будут содержать номера строк, а с помощью инструмента retrace, который поставляется с proguard (включенным в Android SDK), вы можете отлаживать, как обычно.
Обратите внимание, что даже если вы не использовали эти два параметра конфигурации, retrace все еще может выводить полезную информацию, если у вас есть файл сопоставлений, хотя и не совсем однозначно.
Примечание. Файл с сопоставлениями создается с помощью опции конфигурации proguard:
-printmapping outputfile.txt
В файле ant, поставляемом с Android SDK, он установлен на map.txt.
Удачи.
Ответ 2
Чтобы использовать любые трассировки стека из вашей учетной записи Android Market, вы можете использовать файл карты, созданный с помощью опции -printmapping
в конфигурации ProGuard, с помощью инструмента ReTrace (ProGuard companion) для декодирования трассировки стека. Вы также можете декодировать вручную, используя содержимое файла карты, но это утомительно.
В Руководстве ProGuard в примерах имеется раздел о создании полезных обфускационных стековых следов, в том числе о том, как сохранить номера строк.
К сожалению, если вы не установили ProGuard, чтобы сохранить номера строк, вы сможете идентифицировать только тот метод, который генерирует исключение.
Ответ 3
Вставьте трассировку стека в файл 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, когда вы обфускации