Android-ретрейсер Proguard (сборка API 23)

Недавно я начал использовать proguard в своем проекте. Я создал тестовый сбой (в классе приложения) Я получил следующую ошибку -

 03-23 10:12:26.030 4956-4956/social.game.dating E/AndroidRuntime: FATAL EXCEPTION: main
 java.lang.NullPointerException
 at social.game.dating.App.App.m(Unknown Source)
 at social.game.dating.App.App.l(Unknown Source)
 at social.game.dating.App.App$a.a(Unknown Source)
 at social.game.dating.App.App$a.onPostExecute(Unknown Source)
 at android.os.AsyncTask.finish(AsyncTask.java:631)
 at android.os.AsyncTask.access$600(AsyncTask.java:177)
 at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:137)
 at android.app.ActivityThread.main(ActivityThread.java:5041)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:511)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

Я запускаю скрипт

 java -jar retrace.jar -verbose d:/mapping.txt d:/obf.txt > d:/fixed.txt

обфускать код и получить следующее:

 03-23 10:12:26.030 4956-4956/social.game.dating E/AndroidRuntime: FATAL EXCEPTION: main
 java.lang.NullPointerException
 at social.game.dating.App.App.void initSync()(Unknown Source)
 at social.game.dating.App.App.void access$100()(Unknown Source)
 at social.game.dating.App.App$InitTask.java.lang.Void doInBackground(java.lang.Void[])(Unknown Source)
 void onPostExecute(java.lang.Void)
 at social.game.dating.App.App$InitTask.void onPostExecute(java.lang.Object)(Unknown Source)
 at android.os.AsyncTask.finish(AsyncTask.java:631)
 at android.os.AsyncTask.access$600(AsyncTask.java:177)
 at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:137)
 at android.app.ActivityThread.main(ActivityThread.java:5041)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:511)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 at dalvik.system.NativeStart.main(Native Method)

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

PS тоже попробовал

 retrace.bat -verbose d:/mapping.txt d:/obf.txt > d:/out.txt

и получил тот же результат

1 ответ

Вам нужно добавить следующее правило в конфигурационный файл proguard:

-keepattributes SourceFile,LineNumberTable

Если вы хотите скрыть фактическое имя исходного файла, добавьте следующее правило:

-renamesourcefileattribute SomeName

и все имена файлов будут переименованы в SomeName.java, но после деобфускации у вас будет имя класса и номер строки, которые позволят вам восстановить фактическую строку кода

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