https://www.guardsquare.com/en/proguard/manual/optimizations说
类/拆箱/枚举
尽可能将枚举类型简化为整数常量。
但显而易见的问题是,什么时候可能?我假设枚举不能有字段/方法?它是否仅适用于局部变量或方法参数?
特别是,如果我有一个字段和一个字段的getter,我可以将它转换为一个静态方法切换枚举;这会启用优化吗?
答案 0 :(得分:0)
您的假设是正确的,为了使Proguard优化enum
,enum
不应具有方法和关联的值(字段)。 Proguard将这些简单的枚举转换为int,因此,您可以在编译时获得枚举的类型安全性,并在运行时获得int的性能。
它既适用于变量也适用于方法参数。
因此,对于您在enum
中有一个字段的情况,该优化将不适用。
Jake Wharton曾在Android团队和others工作,在此Reddit post中讨论了枚举优化。
Proguard设置应如下所示:
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
请注意,其中包含proguard-android-optimize.txt
文件,而不包含proguard-android.txt
文件。
ProguardEnumIntDefTest是Github上的一个示例项目,试图找出Proguard是否将枚举转换为整数。