androidStudio build

Proguard首次学习

2019-08-24  本文已影响0人  众少成多积小致巨

参考

简介

可以对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

** 匹配所有字符,包括 .

*** 匹配所有参数类型

... 匹配所有参数类型,且不限参数个数

这个配置项是一个使用的技术活,需要多练手

然后在使用过程中不懂的到官网搜选项查看意思,感觉英文不好就点这里 (有惊喜)

上一篇 下一篇

猜你喜欢

热点阅读