一、 proguard到底是什么
ProGuard工具是用于压缩、优化、混淆我们的代码,主作用是可以移除代码中的无用类,字段,方法和属性同时可以混淆。
二、 proguard技术的功能
- 压缩
检查并移除代码中无用的类 - 优化
对代码字节码的优化,移除无用的字节码命令 - 混淆
混淆定义的名称,把它定义成无意义的名称,这样对方即使反编译也无法对apk产生影响 - 预检测
在java平台上对处理后的代码再次进行检测
三、 proguard工作原理
EntryPoint
可以理解成是一种标志,它是在proguard过程中不会被处理的类或者方法。在proguard进行压缩的过程中,它会从EntryPoint类中开始搜索出那些类和它的成员在使用,被标记为EntryPoint的类和方法有些在使用,而且这些是在混淆文件中配置不希望混淆的类或方法,但是也有些它是没有使用的,对于没有使用的类和成员,就会在压缩阶段被proguard所丢弃,这样在进一步的proguard优化步骤中,那些不是EntryPoint的类会把它设置为private,而不使用的参数都会被移除,最后会对非EntryPoint类进行重命名,以便预检测,来保证整个代码的稳定性。
四、 为什么要使用proguard
Java是跨平台的解释型语言,而Java的源代码会被编译成字节码存储在.class文件中,由于跨平台的需要,Java的字节码中包括了很多源代码的信息,如变量名、方法名等,并且通过这些名称(成员变量和方法)很容易反编译成源代码,为了防止这种情况,就需要使用proguard对java字节码进行混淆。