如何在Android上debugging混淆(使用ProGuard)应用程序?
当我有这样的事情
ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException ERROR/AndroidRuntime(18677): at com.companyname.aaa(Unknown Source)
我怎么知道问题出在哪里并且debugging这个问题? 我只有ProGuard的映射输出,不知道行号。 谢谢。
将以下行添加到您的proguardconfiguration中。
-renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable
现在,您的堆栈跟踪将包含行号,并且使用proguard(包含在Android SDK中)附带的回溯工具,您可以像正常一样进行debugging。
请注意,即使你没有使用这两个configuration选项,回溯仍然可以输出有用的信息,只要你有映射文件,尽pipe不是完全明确的。
注意:具有映射的文件由proguardconfiguration选项生成:
-printmapping outputfile.txt
在Android SDK附带的ant文件中,它被设置为mapping.txt。
祝你好运。
要使用Android电子市场帐户中的任何堆栈跟踪,可以使用ProGuardconfiguration中的-printmapping
选项生成的映射文件与-printmapping
(ProGuard配套工具)解码堆栈跟踪。 您也可以使用地图文件的内容手工解码,但是这是很乏味的。
在ProGuard手册的示例中,有一节介绍如何生成有用的混淆堆栈轨迹,包括如何保留行号。
不幸的是,如果您没有设置ProGuard来保留行号,那么您将只能识别抛出exception的方法。
将堆栈跟踪粘贴到stack_trace.txt中
运行以下命令:java -jar retrace.jar classes-processed.map stack_trace.txt
retrace.jar位于sdk \ tools \ proguard \ lib \ retrace.jar中classes-processed.map是当您执行混淆时由proguard生成的输出文件