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