如何在Android上使用混淆(使用ProGuard)应用程序进行调试?

shi*_*ami 67 debugging obfuscation android proguard

当我得到这样的东西

ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677):     at com.companyname.a.a.a(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我如何知道问题所在并调试此问题?我只获得了ProGuard的映射输出,并且不知道行号.谢谢.

Dan*_*icz 112

将以下行添加到proguard配置中.

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable
Run Code Online (Sandbox Code Playgroud)

现在,您的堆栈跟踪将包含行号,并且通过使用proguard附带的回溯工具(包含在Android SDK中),您可以像平常一样进行调试.

请注意,即使您没有使用这两个配置选项,只要您拥有映射文件,回溯仍然可以输出有用的信息,尽管不是完全明确的.

注意:带有映射的文件由proguard配置选项生成:

 -printmapping outputfile.txt
Run Code Online (Sandbox Code Playgroud)

在Android SDK附带的ant文件中,它设置为mapping.txt.

祝好运.


cis*_*rns 15

要使用Android Market帐户中的任何堆栈跟踪,您可以使用-printmappingProGuard配置中的选项生成的地图文件和ReTrace(ProGuard配套工具)来解码堆栈跟踪.您也可以使用地图文件的内容手动解码,但这很乏味.

在示例中的ProGuard手册中,有一节介绍如何生成有用的混淆堆栈跟踪,包括如何保留行号.

不幸的是,如果您没有将ProGuard设置为保留行号,那么您将只能识别抛出异常的方法.

  • 此过程也在http://developer.android.com/guide/developing/tools/proguard.html#decoding中进行了解释. (4认同)

小智 5

要回溯混淆的 ProGuard 文件,请执行以下步骤:

  1. 您需要安装 Proguard。

  2. Proguard 为您提供了一个 UI 模式,这是一个很好的回溯工具。

  3. 打开你在 MAC 机器上找到的 proguardgui.sh

    /Users/{name}/Library/Android/sdk/tools/proguard/bin/proguardgui.sh
    
    Run Code Online (Sandbox Code Playgroud)

    您可以通过终端运行它。

前卫

  1. 然后你可以输入你的映射文件和你想要回溯的片段,它应该被回溯

proguardgui 输出