如何使用映射文件反混淆Android堆栈跟踪

29

我从崩溃报告系统中获得了一个堆栈跟踪,但它被混淆了,像这样:

  

... Failed resolution of: Lru/test/c/b/a; ...

我有一个映射文件。

如何使用mapping.txt来反混淆这个堆栈跟踪?

3个回答

39

从应用程序页面获取反混淆的崩溃堆栈跟踪

按照以下步骤将映射文件mapping.txt上传到您的应用Play商店页面:

  1. 登录 Play 控制台。
  2. 选择一个应用程序。
  3. 在左侧菜单中,单击 Android 可视化效果 > 去混淆文件。
  4. 在您的应用程序版本旁边,单击上传。
  5. 上传该应用程序版本的 ProGuard 映射文件。

完成后,若要查看反混淆的崩溃堆栈跟踪,请执行以下操作:

  1. 登录 Play 控制台。
  2. 选择一个应用程序。
  3. 在左侧菜单中,单击 Android 可视化效果 > ANR 和崩溃。
  4. 选择一个崩溃。
  5. 在“堆栈跟踪”选项卡上,您将看到您的反混淆堆栈跟踪。

您可以查看此链接以了解更多详细信息。

反混淆一段堆栈跟踪

要自己转换代码,请使用retrace脚本(Windows上的retrace.bat;Mac/Linux上的retrace.sh)。 它位于~/Android/sdk/tools/proguard/bin/目录中。该脚本采用mapping.txt文件和您的堆栈跟踪,生成一个新的可读取的堆栈跟踪。使用retrace工具的语法为:

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

7
似乎SDK中已经删除了反混淆脚本,或者它不再在路径中。你的命令对我没有起作用。可以在这里找到它:~/Library/Android/sdk/tools/proguard/bin/retrace.sh - Janusz
我更新了我的回答@Janusz。实际上 <sdk-root> 已经存在,但由于我没有用 ' ` ' 注释它,所以它没有显示出来,直到现在我才注意到。可能我有点晚了,但还是感谢你提醒我。 - Ricardo
运行'retrace.bat -verbose mapping.txt obfuscated_trace.txt'时出错:无法在目录'C:\Users\Edgar\AndroidStudioProjects\Swapit_Android\app'中运行程序"retrace.bat":CreateProcess错误=2,系统找不到指定的文件。 - Edgar
@Ricard,我找到了Proguard的安装位置,我运行了以下命令。我使用的是Windows系统,并运行以下命令:retrace.bat [-verbose] mapping.txt,但是我遇到了以下错误: 错误:[-verbose](系统找不到指定的文件) - Edgar
1
我使用了retrace.sh [-verbose] mapping.txt [<stacktrace_file>],它非常有用,因为应用中心在上传映射文件之前无法追踪问题。谢谢伙计。 - MusabAlothman
显示剩余3条评论

12
我们可以使用pro-guard工具重新追踪:
1. 从以下位置获取映射文件。
<project-path>app/build/outputs/mapping/flavor/release/mapping.txt

在下面的位置中找到ProGuard工具,即"proguardgui"。
<your-computer-name>/AppData/Local/Android/SDK/tools/proguard/lib

然后您将得到 proguardgui.jar

在Mac上: /Users/<您的计算机名称>/Library/Android/sdk/tools/proguard/lib

通过终端使用

java -jar /Users/<your computer name>/Library/Android/sdk/tools/proguard/lib/proguardgui.jar

ProGuardGUI 工具

现在点击左侧菜单栏上的重新映射选项,即可打开如下窗口。从上述位置浏览您的 mapping.txt 文件,并将混淆后的堆栈跟踪错误日志添加到混淆后堆栈跟踪窗口中,然后单击 ReTrace 按钮获取解混淆的错误报告。

还有一种自动方式可以使用 Google Play Store 控制台实现。

请查看 Google Play Store 控制台的此网站获取详细步骤。


哇塞,这太神奇了。我一直都是用手做这个 T.T - Dave

1

另一种选项(适用于我)。

位置:C:\Program Files\Android\Android Studio\jre\bin(java.exe在此处)

  1. 添加来自Sdk\tools\proguard\lib的文件:

    proguard.jar

    retrace.jar

  2. 添加您的mapping.txt和stacktrace文件

  3. 创建一个批处理文件,其中包含以下行:

    java -jar retrace.jar -verbose mapping.txt stacktrace

    pause

  4. 运行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接