ProGuard优化指令
1.1、-dontoptimize

不进行优化过程,如果配置了此指令,与优化相关的指令就会全部失效。

1.2、-optimizationpasses ${level}

指定代码的优化次数,优化可以进行很多轮。${level}的取值范围是[1,9],默认值是5。

示例:

-optimizationpasses 5
1.3、-optimizations ${filter}

指定要启用和禁用的优化,在更精细的水平。

示例:

-optimizations !code/simplification/arithmetic,!code/allocation/variable,!field/*,!class/merging/*

具体优化点有很多个,我们也可以控制不需要进行哪些优化。!就表示不要进行那个与优化。

1.4、-assumenosideeffects {class_specification}

assumenosideeffects拆开是assume no side effects,假定无效的意思,就是说被标识的代码是无效代码,可以被删掉。 我们通常用此指令删除一些日志打印的类和相关方法调用。

示例1:

-assumenosideeffects class android.util.Log {
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

-keep class android.util.Log {
    *;
}

示例2:

-assumenosideeffects class com.fpliu.newton.log.Logger {
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

-keep class com.fpliu.newton.log.Logger {
    *;
}
1.5、-allowaccessmodification

此属性允许修改访问修饰符,因为有些时候,使用其他访问修饰符会更好。

1.6、-mergeinterfacesaggressively

指定接口可以合并,即使实现类没实现所有的方法。该选项可以通过减少类的总数减少输出文件的大小。