【问题标题】:How to debug with obfuscated (with ProGuard) applications on Android?如何在 Android 上使用混淆(使用 ProGuard)应用程序进行调试?
【发布时间】:2011-04-24 05:20:32
【问题描述】:

当我得到这样的东西时

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

我怎样才能知道问题出在哪里并调试这个问题? 我只得到了 ProGuard 的映射输出,不知道行号。 谢谢。

【问题讨论】:

    标签: android debugging obfuscation proguard


    【解决方案1】:

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

    -renamesourcefileattribute SourceFile    
    -keepattributes SourceFile,LineNumberTable
    

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

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

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

     -printmapping outputfile.txt
    

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

    祝你好运。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 加入 ADT 17(目前是预览版)是对如何为 Android 配置 PorGuard 的进一步更改。 tools.android.com/recent/proguardimprovements 它不会改变使用打印映射进行调试的方式,但会改变您最初配置 ProGuard 的方式。
      • @cistearns 我尝试了相同的方法,但输出与编码值相同:(有什么帮助吗?
      • 我不明白如何使用它。你能提供更多信息吗?甚至可以调试混淆的应用程序吗?
      • 这仅适用于我在活动中的情况,但不会命中片段中的断点。你知道为什么会这样吗?问候
      【解决方案3】:

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

      1. 您需要安装 Proguard。

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

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

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

        您可以通过终端运行它。

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

      【讨论】:

        【解决方案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生成的输出文件

        【讨论】:

          【解决方案5】:

          这里是 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>]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多