proguard 是否将所有枚举转换为 int 或需要为此配置

Does proguard converts all enums to int or needs to be configured for this

proguard 会自动将枚举转换为整数以进行内存优化,还是我必须对其进行配置才能执行此操作? 如果我一定要配置配置是什么?

ProGuard 的 optimizations page 中列出了优化。它似乎是默认优化之一,但如果您需要更多控制(例如,禁用除枚举拆箱之外的所有 class/* 优化),可以明确指定它(与其他优化一样)。

class/unboxing/enum

Simplifies enum types to integer constants, whenever possible.

Proguard 设置

Proguard 需要有如下配置:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

请注意包含 proguard-android-optimize.txt 文件而不是 proguard-android.txt 文件。

ProguardEnumIntDefTest 是 Github 上的示例项目,它试图找出 Proguard 是否将枚举转换为整数。


优化

为了 Proguard 优化一个 enumenum 不应该有方法和关联的值(字段)。 Proguard 将这些简单的枚举转换为整数,因此您可以在编译时获得枚举的类型安全性,并在运行时获得整数的性能!