2016-03-23 1 views
0

Недавно я начал использовать proguard в своем проекте. я создал краш-тест (в App класс) я получил следующую ошибку -android retrace 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 **? Я буду держать что-то еще, что было бы лучше обойти/переименовать? –

+1

@AntonKizema Он будет хранить все возможные атрибуты, полный список здесь http://proguard.sourceforge.net/manual/attributes.html, но я не думаю, что сохранить их все - отличная идея. – curioushikhov

 Смежные вопросы

  • Нет связанных вопросов^_^