proguard是一款收费的Java类文件的缩短、优化、混肴的软件。proguard可能很好的呵护JAVA源代码,防止其被反编译,呵护措施便是对于编译好后的class文件妨碍混合。该软件集缩短器、优化器、混合器、预校验器于一身,功能强盛,推选需要的人下载。
proguard功能介绍:
缩短(Shrink):检测并移除了代码中无用的类、字段、措施以及特色(Attribute)。
优化(Optimize):对于字节码妨碍优化,移除了无用的指令。
混合(Obfuscate):运用a,b,c,d这样杂乱而分心义的称谓,对于类、字段以及措施妨碍重命名。
预检(Preveirfy):在Java平台上对于处置后的代码妨碍预检,确保加载的class文件是可实施的。
proguard使命道理:
ProGuar由shrink、optimize、obfuscate以及preveirfy四个步骤组成,每一个步骤都是可选的,咱们可能经由配置装备部署剧原本抉择实施其中的哪多少个步骤。
混合便是移除了没实用到的代码,而后对于代码概况的类、变量、措施重命名为人可读性很差的杂乱名字。
那末有一个下场,ProGuard奈何样知道这个代码不被用到呢?
这里引入一个Entry Point(进口点)意见,Entry Point是在ProGuard历程中不会被处置的类或者措施。在缩短的步骤中,ProGuard会从上述的Entry Point开始递归遍历,搜查哪些类以及类的成员在运用,对于不被运用的类以及类的成员,就会在缩短段扔掉,在接下来的优化历程中,那些非Entry Point的类、措施都市被配置为private、static或者final,不运用的参数会被移除了,此外,有些措施会被标志为内联的,在混合的步骤中,ProGuard会对于非Entry Point的类以及措施妨碍重命名。
那末这个进口点奈何样来呢?便是从ProGuard的配置装备部署文件来,惟独这个配置装备部署了,那末就不会被移除了。
ProGuard反对于种类的优化:
除了在缩短操作删除了的无用类,字段以及措施外,ProGuard也能在字节码级提供功能优化,外部措施有:
常量表白式求值
删除了不用要的字段存取
删除了不用要的措施调用
删除了不用要的分支
删除了不用要的比力以及instanceof验证
删除了未运用的代码
删除了只写字段
删除了未运用的措施参数
像push/pop简化同样的林林总总的peephole优化
在可能的情景下为类削减static以及final修饰符
在可能的情景下为措施削减private, static以及final修饰符
在可能的情景下使get/set措施成为内联的
当接口惟独一个实现类的时候,就取代它
抉择性的删除了日志代码
实际的优化下场是依赖于你的代码以及实施代码的伪造机的。重大的伪造机比有重大JIT编译器的低级伪造机更实用。不论若何,你的字节码会变患上更小。
仍有一些清晰需要优化的技术不被反对于:
使非final的常量字段成为内联,像get/set措施同样使其余措施成为内联,将常量表白式移到循环之外