ProGuard算是Android上的一大利器,主要进行java代码的裁剪压缩,优化,混淆以及预校验,在日常工作中有时会出现一些很奇怪的问题,明明我的代码里面有
这个类,属性或者接口,可是为啥到用的时候死活提示就没有了呢?这类奇葩问题在还没有接触ProGuard的亲面前可谓是相当无语,当你知道有ProGuard之后一切
都迎刃而解了,都是ProGuard在做优化裁剪的时候可能没有human beings这么智能,它并不知道你后期要用,在ProGuard的视线范围内如果你没有用到,它就会给
你干掉~~
那么知道ProGuard工作具体是做什么的之后,还想从官方文档中能够得到一些官方对其的定义和指南,你就可以到Marshamallow/external/proguard/docs目录中看看
官方的解释,如下的内容是我阅读该文档的时候了解到的,也可以说是翻译的,仅供参考!
ProGuard是一个免费的java类文件裁剪器,优化器,混淆器以及预校验器。它检测并且删除没有用到的类,字段,方法和属性。它优化字节码和删除无用的指令。
为了混淆原有的代码,它用毫无意义的简短名字为保留下来的类,字段和方法重命名,为执行代码在Java 6或者更高的Java版本以及Java微型版本的执行做预校验
处理。
ProGuard的一些用处:
1.创建更加紧凑的代码,为了更小的代码文件,更快的通过网络传输,更快的加载以及更少的占用内存。
2.使得程序和代码库更难被反编译。
3.列出死代码,也就是没有使用过的代码,列出来之后就可以从源码中将这部分没用的代码移除。
4.将现有的代码在Java 6或者更高版本上进行重定位和预校验,以便充分利用其快速的类加载优势。
ProGuard相较于其它代码混淆器的主要优势可能就是其紧凑的基于模板的配置了。一些直观的命令行选项或者一个简单配置文件就足矣。用户手册会解释所有的有效
选项并且会展示这种强大的配置风格的例子。
ProGuard工具很快,处理几M的程序和代码库仅需要几秒时间。
ProGuard是一个命令行工具带有可选图形用户界面(proguardgui.sh以及proguard.sh)。其同时可以是 Ant, Gradle, 以及JME Wireless Toolkit.的插件。
或许通过上面的描述,你还有很多关于ProGuad的疑问,例如官方文档中的如下问题,让我们来看看解释:
1.What is shrinking?
什么是裁剪,压缩,缩减?Java源码(.java文件)通常会被编译成字节码(.class文件)。字节码比java源码更加紧凑,但是它有可能还包含一些没有用过的代码,尤其是当
其包含运行时类库时。类似ProGuard这类缩减程序可以分析字节码,并且删除没有用到的类,字段以及方法。被处理过的程序仍然保留和删减之前的相同的功能,对原
程序的功能没有任何影响,包括在发生exception时打印的调用栈信息也一样的。
2.What is obfuscation?
什么是混淆?默认情况下,编译出的字节码仍然会包含一些调试信息:源码文件名,代码行号,字段名