androidAndroid收藏集Android混淆

Android混淆——了解这些就够了

2018-05-03  本文已影响1568人  落魄的安卓开发

Csdn

混淆介绍

Proguard是一个Java类文件压缩器、优化器、混淆器、预校验器。压缩环节会检测以及移除没有用到的类、字段、方法以及属性。优化环节会分析以及优化方法的字节码。混淆环节会用无意义的短变量去重命名类、变量、方法。这些步骤让代码更精简,更高效,也更难被逆向(破解)。

混淆后默认会在工程目录app/build/outputs/mapping/release(debug)下生成一个mapping.txt文件,这就是混淆规则,我们可以根据这个文件把混淆后的代码反推回源本的代码,所以这个文件很重要,注意保护好。原则上,代码混淆后越乱越无规律越好,但有些地方我们是要避免混淆的,否则程序运行就会出错。

ProGuard常用操作

(上面两种方式保持类后,会发现类名虽然未混淆,但里面的具体方法和变量命名还是变了)

注意事项

混淆情况记录:

例子中使用:classA和classB,在加混淆的情况下多种结果:

  1. 如果classA没有被keep,则不会看到classA的class文件

  2. 如果classA没有被keep,classB被保持,同时classB引用到了classA,这个时候能够看到被混淆的classA的class文件,如显示为a

  3. 如果classA中通过反射,获取到classB,那么classB的类名及反射用到的方法必须keep住

  4. jar包混淆,暴露出的类、方法、方法的参数需要keep住

  5. 情况说明:工程Demo依赖了 小米渠道的依赖,小米依赖又依赖了Common,对Common进行混淆但是不对小米渠道混淆,那么小米的依赖中使用到的Common中的类都需要keep住

参考内容

Proguard官方文档

参考

可能还参考了别的,但是没有注明,不好意思了,给忘记了,google吧

上一篇下一篇

猜你喜欢

热点阅读