如何调试与混淆(与 ProGuard)应用程序在 Android?

当我得到这样的东西

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

我如何知道问题在哪里并调试这个问题? 我只从 ProGuard 得到映射输出,不知道行号。 谢谢。

34063 次浏览

要使用 Android Market 帐户中的任何堆栈跟踪,可以使用地图文件,该文件使用 ProGuard 配置中的 -printmapping选项生成,并使用 ReTrace (ProGuard 附属工具)对堆栈跟踪进行解码。您还可以使用映射文件的内容手动解码,但是这很乏味。

在示例下的 ProGuard 手册中,有一个关于生成有用的模糊堆栈跟踪的部分,包括如何保留行号。

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

在前卫配置中添加以下代码行。

-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

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

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

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

 -printmapping outputfile.txt

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

祝你好运。

将堆栈跟踪粘贴到 stack _ trace. txt 中

运行以下命令: java-jar retrace.jar 类-处理. map stack _ trace. txt

Jar 位于 sdk 工具 proGuard lib retrace.jar Classs- 处理的. map 是在进行模糊处理时由 proGuard 生成的输出文件

这里有一个来自 AndroidSDK: 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>]

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

  1. 您需要安装 ProGuard。

  2. ProGuard 为您提供了一个用户界面模式,这是一个很好的工具来回溯。

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

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

    你可以在终端机上运行。

proguardgui

  1. 然后,您可以输入您的映射文件和剪辑您想要回溯,它应该被回溯

proguardgui outputs