Proguard首次学习
参考
简介
可以对java类文件(不只是java语言生成的java类文件奥),进行压缩,优化,混淆,预校验。
压缩:检测并移除未使用类,方法,字段,属性
优化:分析优化字节码方法
混淆:对经过压缩,优化后的类,方法,字段重命名
预校验:增加必要的预校验信息(哪些必要的,我也不知道,问上帝去吧,也可以去问jvm虚拟机规范)
经过前三个步骤后,编译的代码就会变得更小,更高效,更难反编译
Entry Point
是在ProGuard过程中不会被处理的类或方法。
压缩阶段:ProGuard会从上述的Entry Point开始递归遍历,搜索哪些类和类的成员在使用,对于没有被使用的类和类的成员,就会在压缩段丢弃
优化阶段:那些非Entry Point的类、方法都会被设置为private、static或final,不使用的参数会被移除,此外,有些方法会被标记为内联的
混淆阶段: ProGuard会对非Entry Point的类和方法进行重命名
Entry Point配置
keep选项
-keep [修饰符] 类: 保留类、类成员
-keepclassmembers [修饰符] 类 :保留类成员
-keepclasseswithmembers [修饰符] 类 : 保留类、类成员
-keepnames 类 : 保留类、类成员的名字,可以进行压缩
-keepclassmembernames 类: 类成员名字,可以进行压缩
-keepclasseswithmembernames 类 :保留类、累成员名字,可以压缩
压缩选项
-dontshrink : 默认压缩是开启的,停用压缩
混淆选项
-dontobfuscate :默认启动混淆,停用混淆
通配符
<init> 匹配所有构造器
<fields> 匹配所有字段
<methods> 匹配所有方法
* 匹配所有字符,但不包括 ., 即使 com.* 不能匹配com.csu.Hello, 只能匹配, com.Hello
** 匹配所有字符,包括 .
*** 匹配所有参数类型
... 匹配所有参数类型,且不限参数个数
这个配置项是一个使用的技术活,需要多练手
然后在使用过程中不懂的到官网搜选项查看意思,感觉英文不好就点这里 (有惊喜)