ProGuard

生活百科 2023-01-26 08:57生活百科www.aizhengw.cn

ProGuard

ProGuard是一个压缩、最佳化和混淆Java位元组码档案的免费的工具,它可以删除无用的类、栏位、方法和属性。可以删除没用的注释,最大限度地最佳化位元组码档案。它还可以使用简短的无意义的名称来重命名已经存在的类、栏位、方法和属性。常常用于Android开发用于混淆最终的项目,增加项目被反编译的难度。

基本介绍

  • 外文名ProGuard
  • 作用压缩、最佳化和混淆Java位元组码档案
  • 性质免费
  • 领域计算机

压缩

JAVA原始码(.java档案)通常被编译为位元组码(.class档案)。而完整的程式或程式库通常被压缩和发布成Java文档(.jar档案)。位元组码比 Java源档案更简洁,它仍然包含大量的无用代码,尤其它是一个程式库的时候。ProGuard的压缩程式操作能分析位元组码,并删除无用的类、栏位和方法。程式只保留功能上的等价,包括异常堆叠描述所需要的信息。

位元组码

通常情况下,编译后的位元组码仍然包含了大量的调试信息源档案名称,行号,栏位名,方法名,参数名,变数名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程式。有时,这是令人厌恶的。例如像ProGuard这样的混淆器就能删除这些调试信息,并用无意义的字元序列来替换所有名字,使得它很难进行逆向工程,它进一步地精简代码。除了异常堆叠信息所需要的类名,方法名和行号外,程式只会保留功能上的等价。通过以上的了解,你应该明白为什幺需要混淆了。

种类最佳化

ProGuard支持以下种类的最佳化
除了在压缩操作删除的无用类,栏位和方法外,ProGuard也能在位元组码级提供性能最佳化,内部方法有
常量表达式求值
删除不必要的栏位存取
删除不必要的方法调用
删除不必要的分支
删除不必要的比较和instanceof验证
删除未使用的代码
删除只写栏位
删除未使用的方法参数
像push/pop简化一样的各种各样的peephole最佳化
在可能的情况下为类添加static和final修饰符
在可能的情况下为方法添加private, static和final修饰符
在可能的情况下使get/set方法成为内联的
当接口只有一个实现类的时候,就取代它
选择性的删除日誌代码
实际的最佳化效果是依赖于你的代码和执行代码的虚拟机的。简单的虚拟机比有複杂JIT编译器的高级虚拟机更有效。无论如何,你的位元组码会变得更小。

不支持类

仍有一些明显需要最佳化的技术不被支持
使非final的常量栏位成为内联
像get/set方法一样使其他方法成为内联
将常量表达式移到循环之外
Optimizations that require escape analysis
上一篇:兽灵追猎者 下一篇:护肤

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有