如何在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生成的输出文件