0

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

USER9561
  • 1,084
  • 3
  • 15
  • 41
Anton Kizema
  • 1,072
  • 3
  • 13
  • 27

1 Answers1

1

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

curioushikhov
  • 2,461
  • 2
  • 30
  • 44
  • what if I use -keepattributes ** ? I will keep smth else, which would be better to obuskate/rename? – Anton Kizema Mar 23 '16 at 11:46
  • 1
    @AntonKizema It will keep all possible attributes, full list is here http://proguard.sourceforge.net/manual/attributes.html but I don't think that keeping all of them is a great idea. – curioushikhov Mar 23 '16 at 11:51