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

时间:2010-10-12 09:46:39

标签: android debugging obfuscation proguard

当我得到这样的东西时

ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677):     at com.companyname.a.a.a(Unknown Source)

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

5 个答案:

答案 0 :(得分:111)

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

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

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

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

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

 -printmapping outputfile.txt

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

祝你好运。

答案 1 :(得分:15)

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

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

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

答案 2 :(得分:4)

将堆栈跟踪粘贴到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生成的输出文件

答案 3 :(得分:4)

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

  1. 您需要安装Proguard。

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

  3. 打开在MAC机中找到的proguardgui.sh

    /Users/{name}/Library/Android/sdk/tools/proguard/bin/proguardgui.sh
    

    您可以通过终端运行它。

proguardgui

  1. 然后您可以输入您的映射文件和要回溯的片段,应该对其进行回溯

proguardgui outputs

答案 4 :(得分:0)

以下是指向Android SDK中的追溯工具的官方文档的链接:https://developer.android.com/studio/build/shrink-code#decode-stack-trace

本文也很不错:https://medium.com/@maheshwar.ligade/de-obfuscate-stack-traces-6e19a52a3379

对于所有复制粘贴的兄弟:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]