android我的测试收藏Android构建相关

Android混淆后坑了多少程序猿?

2016-06-17  本文已影响3288人  沈同学

最近学习了混淆,并在项目里运用到了,结果收到异常报告的时候傻眼了,类名,方法名都被a,b,c代替了,这让我怎么知道是哪里报错了....


一、寻找mapping.txt文件

Google一番后发现了mapping.txt这个东东。要想知道mapping.txt在哪,就先要弄清楚它是怎么来的。我们每次build,ProGuard就会输出下面几个文件:

既然是build后输出的,那么位置也很清楚了:<module-name>/build/outputs/mapping/release/


有了mapping.txt,也知道这个文件就是源代码与混淆后的类,方法和属性名字之间的映射。那怎么能看到源代码呢?

二、还原混淆后的代码

首先要注意的一点是:每次混淆打包后,都会覆盖之前的mapping.txt,所以最好每次发版都保存下当前的mapping.txt,并做好标注区分出版本,以便以后使用。

ProGuard 提供了命令行和 GUI 工具来还原混淆后的代码。

1.命令行

通过retrace工具(windows版本是retrace.bat,Mac/Linux上是retrace.sh),它的位置在<sdk-root>/tools/proguard/。把需要还原的堆栈信息保存在 obfuscated_trace 文件中

你可以再终端下输入:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

2.GUI 工具

如果不用终端也可以,在<sdk-root>/tools/proguard/bin下,有个proguardgui.batGUI工具

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

如果还有疑问可以查看Shrink Your Code and Resources

上一篇下一篇

猜你喜欢

热点阅读