Android根据mapping.txt还原混淆的代码

来源:互联网 发布:蚂蚁影院电影网站源码 编辑:程序博客网 时间:2024/05/16 17:31

        最近在关注友盟后台反馈应用崩溃情况,但是在看log日志的时候不是太直观,原因是上传到线上的apk文件是经过混淆的。那么我们该怎么样才能更直观的看到log的问题尼?这个解决的方法很简单,就是上传混淆后的apk的mapping文件(友盟的错误列表下面就可以添加mapping文件了,之后就可以直观的查看log了,这个mapping文件是分版本的,所有得根据自己的需求处理)。

       今天大致的介绍下这个功能的原理。

       其实友盟实现这个功能也是根据android的ProGuard 实现的。ProGuard 在开发中很常用,但是我们只用在混淆代码,今天就简单的记录下他是怎么还原混淆代码的操作。

      首先看一个被混淆的log日志:

java.lang.NullPointerException: null format argument

at com.test.proguard.activity.ListActivity.a(ZuoWenListAct ivity.java:126)

对于上面log中的a我们不太好理解,那么这时借助ProGuard+mapping文件我们就可还原a的具体名称,处理后的log日志:

java.lang.NullPointerException: null format argument

at com.test.proguard.activity.ListActivity.initData(ZuoWenListActivity.java:126)

这样我们就可以清除的看到a代表initData方法。


工具的使用:

该工具位于  <android-sdk>/tools/proguard/bin/ 目录下。

里面的 proguardgui.bat 为 GUI 工具,

1) 运行 proguardgui.bat
2) 从左边的菜单选择  “ReTrace”
3) 在上面的 mapping 文件中选择你的 mapping 文件 ,在下面输入框输入要还原的代码
4) 点击 “ReTrace!” 按钮

retrace.bat 为命令行工具, 把 mapping 文件和 要还原的堆栈信息保存在 stacktrace 文件中,

然后把这两个文件复制到 retrace.bat 目录下,运行如下命令即可。

retrace.bat -verbose mapping.txt stacktrace.txt > out.txt

    这里就对ProGuard 的一个小功能简单的介绍下。方便自己和大家的学习。


欢迎加入公众号:


原创粉丝点击