Anton Kizema
Anton Kizema

Reputation: 1092

android retrace proguard (build api 23)

I recently started using proguard in my project. I created test crash (in App class) I received next error -

 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)

I run script

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

to obfuskate code, and receive next:

 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)

So I just received method, in wich exception was caught. I would like to get the line, if it is possible, please help!

PS also, I tried

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

and received the same result

Upvotes: 0

Views: 213

Answers (1)

curioushikhov
curioushikhov

Reputation: 2828

You need to add next rule to proguard config file:

-keepattributes SourceFile,LineNumberTable

If you want to hide actual source file name add next rule:

-renamesourcefileattribute SomeName

and all file names will be renamed to SomeName.java, but after deobfuscation you will have class name and line number which will allow you to restore actual line of code

Upvotes: 1

Related Questions