ProGuard的优化步骤可以通过-dontoptimize关闭。更细粒度的控制可以通过-optimizations(专家级命令),结合下面罗列出的过滤器。
?匹配待优化名字中的任何单个字符。
*匹配待优化名字中的任意部分。
优化之前使用”!”是排除在与后续进一步尝试匹配过滤器优化的名字。确保正确地指定过滤器,因为他们不检查潜在的错误。
比如:"code/simplification/variable,code/simplification/arithmetic"只执行指定的两个窥孔优化。
"!method/propagation/\*"执行所有的优化,除了方法之间的传递值。
"!code/simplification/advanced,code/simplification/*"仅仅只会执行所有的窥孔优化。
一些优化必然地蕴含其他优化。请注意列表可能会随时间改变,优化可能被添加和重组。
class/marking/final
将class标记成final。
class/merging/vertical
在类层次结构上垂直合并类。
class/merging/horizontal
在类层次结构上水平合并类。
field/removal/writeonly
删除只写的域。
field/marking/private
将域标记为private。
field/propagation/value
在方法间传递域的值。
method/marking/private
将方法标记为private。
method/marking/static
将方法标记为static。
method/marking/final
将方法标记为final。
method/removal/parameter
删除未被使用的方法参数。
method/propagation/parameter
从方法调用中传播方法参数值到被调用的方法。
method/propagation/returnvalue
从方法传递方法的返回值到调用处。
method/inlining/short
内联短方法。
method/inlining/unique
内联只被调用了一次的方法。
method/inlining/tailrecursion
简化尾递归调用。
code/merging
通过修改分支目标合并相同的代码块。
code/simplification/variable
执行窥孔优化变量加载和存储。
code/simplification/arithmetic
执行窥孔优化运算指令。
code/simplification/cast
执行窥孔优化转换操作。
code/simplification/field
执行窥孔优化域加载和存储。
code/simplification/branch
执行窥孔优化分支命令。
code/simplification/string
执行窥孔优化常量字符串。
code/simplification/advanced
基于控制流和数据流分析简化代码。
code/removal/advanced
基于控制流和数据流分析删除无用代码。
code/removal/simple
基于控制流分析删除无用代码。
code/removal/variable
从本地变量框架中删除未使用的变量。
code/removal/exception
从空的try语句块中删除异常。
code/allocation/variable
在本地变量框架上优化变量内存分配。