通过mapping.txt解析混淆apk的出错信息

来源:互联网 发布:如何查看java jdk版本 编辑:程序博客网 时间:2024/05/14 17:41

一、eclipse导出混淆后的项目时,在项目根目录下会生成一个proguard文件夹,文件夹下包含dump.txt,mapping.txt,seeds.txt, usage.txt四个文件。    

dump.txt 描述apk保重所有class的代码结构

mapping.txt 列出了源代码与混淆后的类,方法和属性名字之间的映射。这个文件对于在构建之后得到的bug报告是有用的,因为它把混淆的堆栈跟踪信息反翻译为源代码中的类,方法和成员名字。

seeds.txt 表示没有混淆的类和成员

usage.txt表示被剥离的类

保存好每一个已发布给用户的程序的mapping.txt文件。通过保存发布构建版本的mapping.txt文件拷贝,确保当用户碰到bug,并把混淆后的堆栈调试跟踪信息提交给你时,你可以进行调试从而修复问题。程序的mapping.txt文件在每次发布构建时都会被覆盖,所以你一定要注意保存正确的版本。
例如,假设你已经发布了一个应用程序并在继续在新的版本中开发添加新的功能。接着你马上启动混淆器并创建一个新的发布版本。该操作把mapping.txt文件覆盖了。一个用户提交了来自当前发布版本的bug报告,该报告包含了堆栈调试信息。你再也不能对用户的堆栈信息进行调试了,因为这个对应用户本机上版本的mapping.txt文件不存在了。其他覆盖mapping.txt文件的情况还有很多,所以对于每一个可能需要调试的版本,你都要确保有一份拷贝。
如何保存mapping.txt文件由你决定。例如,你可以根据版本和构建号来重命名它们,或者连同你的源代码进行版本控制。

二、还原混淆后log方法

sdk\tools\proguard\bin 目录下有个retrace.bat工具可以将混淆后的报错堆栈解码成正常的类名

使用方法如下:

将你的报错堆栈保存到文件中,如obfuscated_trace.txt

拿到版本发布时生成的mapping.txt

执行命令retrace.bat -verbose mapping.txt obfuscated_trace.txt

原创粉丝点击