2016-03-23 118 views
0

我最近開始在我的項目中使用proguard。 我創建的測試崩潰(在App類) 我收到一個錯誤 -android回溯proguard(build api 23)

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 

到obfuskate代碼,並接收下:所以

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 

,並獲得相同的結果

+0

我剛剛發現如果我添加-keepattributes **而不是我得到正確的行號 –

回答

1

您需要添加一條規則來ProGuard的配置文件:

-keepattributes SourceFile,LineNumberTable 

如果你想隱藏實際源文件名添加下一條規則:

-renamesourcefileattribute SomeName 

和所有文件名將被重命名爲SomeName.java,但是在解混後,您將擁有類名和行號,這將允許您恢復實際的代碼行

+0

如果我使用-keepattributes **,該怎麼辦?我會保持別人的,這將更好地obuskate /重命名? –

+1

@AntonKizema它將保留所有可能的屬性,完整列表在這裏http://proguard.sourceforge.net/manual/attributes.html但我認爲保留所有這些都是一個好主意。 – curioushikhov