ProGuard会根据Entry Points来确定哪些代码会被保留、移除、混淆,而Entry Points的来源是我们的配置文件。
在压缩阶段,ProGuard会递归遍历上述的Entry Points,查询出哪些类和成员在使用,并且移除未被使用的类和成员。
在优化阶段,ProGuard进一步优化代码,不在Entry Points中的类和方法会被设置为private、static或final,未使用的参数会被移除,一些方法会被内联。
在混淆阶段,不在Entry Points中的类和成员变量会被重命名,这个过程会确保Entry Points中的类和方法 可以使用以前的名字被访问,即Entry Points中的类和方法不会被混淆,名字保持原来一致。
在预检验中不需要关心Entry Points。
最后我们需要知道,ProGuard不会混淆native代码、drawable、xml。