美文网首页android我的测试收藏Android构建相关
Android混淆后坑了多少程序猿?

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

作者: 沈同学 | 来源:发表于2016-06-17 16:10 被阅读3288次

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


一、寻找mapping.txt文件

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

  • dump.txt
    介绍了APK中所有的class文件的内部结构
  • mapping.txt
    提供原文件对应混淆后的类、方法和字段名称。
  • seeds.txt
    列出没有混淆的类和成员。
  • usage.txt
    列出从apk中删除的代码。

既然是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

相关文章

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

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

  • 分享这件事

    我是Android开发的程序猿,喜欢记录自己遇到的各种坑,分享相关学习心得,并且也在github上造了很多轮子。其...

  • Android方法数超过65535怎么办?

    【简述】 社会在发展,人类在进步,开源的Android着实振奋人心,成就了多少【程序猿】和【攻城狮】的造房梦想,越...

  • 写在第三年

    2018.07.06,加入 ThoughtWorks 三年了!!!从刚毕业后的程序猿小白,成长为程序猿大白。 我的...

  • 阿里巴巴Android开发手册

    代码是一个程序猿的门面,有门面的程序猿才是一个好程序猿。推荐阅读:阿里腾讯Android开发十年,到中年危机就只剩...

  • 超级愉快 之 信息学奥赛一本通 1001:Hello World

    据说优秀的程序猿们都在写博客!!! 先自我介绍一下,高中在校学生,java android 入坑一年小白,C++随...

  • 普通程序员与优秀程序,都差在哪里了?

    同样都是程序猿 为什么有的猿们那么优秀 有的猿们却很普通。。。 优秀与普通之间,到底差了多少呢? 一名优秀的程序员...

  • (译)解决Android混淆常见问题

    本文介绍了Android中开启混淆的好处,混淆的工作原理及如何解决开启混淆后遇到的问题。 原文链接:Trouble...

  • Android中使用BuildConfig.DEBUG必须知道的

    一. 坑 在 《Android: 使用BuildConfig.DEBUG优化你的Log输出 & 开启混淆(prog...

  • Android 混淆那些坑

    前言: 随着现在开发者越来越谱遍,各种各样的应用随之诞生,所以项目混淆是很有必要的。混淆可以减小包的大小,还可以防...

网友评论

  • 怒指天空:你好,我选择mapping文件的时候,无法显示mapping文件所在的文件夹,也就无法选择到mapping文件了。。。
    怒指天空:retrace.bat -verbose mapping.txt obfuscated_trace.txt 运行这个命令的时候,提示无法找到obfuscated文件,然后我自己新建了一个txt,运行不报错,新的文件里面什么东西都没有,请问有碰到这种情况吗?
  • HaKu:其实混淆主要还是增加反编译后的代码可读性,跟减肥没太大关系
    沈同学:@HaKu 说的有道理,先开始我也为了减肥才混淆的,后来也就不太在意这个了
  • 67d75c11e8a3:不敢混淆。一混淆就想哭。:scream:
    沈同学:@弋茹可以拿联系的项目试试:grin::grin:
  • Marno:混淆后APK能减小多少呢?通常来说的话…
    沈同学:@Marno 我记得我写的时候也遇到好多问题,甚至还有打包都成功结果webview的JS方法调用失败……不过耐心好好找找网上肯定都有解答的,建议不要用百度,多用Google
    Marno:@Marno 我之前一直没混淆,因为一混淆就会报错,只用360加固了,加固大了800K。不晓得混淆为啥就会报错,提示我资源文件找不到……
    沈同学:@Marno 我只能用自己的程序给你举个例子,没混淆的时候是10.8M,混淆后是8.9M,这跟你混淆了什么不混淆什么都有关系,我之前在混淆文件加了一行代码,发现就多了0.2M……不过混淆除了减小体积,也为了防止破解嘛

本文标题:Android混淆后坑了多少程序猿?

本文链接:https://www.haomeiwen.com/subject/ydevdttx.html