Gradle 8及以上版本中Moshi无法创建枚举类转换器问题求助
解决Gradle升级后Moshi EnumJsonAdapterFactory空指针问题
问题根源
Gradle 8.x默认启用R8的Full Mode代码混淆,会移除枚举类中反射依赖的字段/方法,而你使用的EnumJsonAdapterFactory依赖反射获取枚举字段,因此触发空指针异常。
具体解决思路
调整R8混淆规则,保留枚举反射所需内容
在项目的proguard-rules.pro文件中添加以下规则,确保枚举的核心方法和自定义字段不被混淆移除:-keepclassmembers enum 你的枚举所在包路径.** { public static **[] values(); public static ** valueOf(java.lang.String); # 若枚举有自定义字段,需补充此行,替换<fields>为实际字段名或直接用*匹配所有 public <fields>; }替换为Moshi内置枚举适配器(推荐)
Moshi本身默认支持枚举的序列化/反序列化,无需手动添加EnumJsonAdapterFactory,直接简化初始化代码:val moshi = Moshi.Builder().build()如果需要自定义枚举的序列化逻辑(比如用枚举的自定义属性值而非枚举名),可以给枚举类添加
@JsonClass(generateAdapter = true)注解,让Moshi生成编译期适配器,彻底避免反射依赖:@JsonClass(generateAdapter = true) enum class YourEnum(val value: String) { OPTION_A("a"), OPTION_B("b"); }升级Moshi版本确保兼容性
确保Moshi版本与Gradle 8.x搭配的AGP版本兼容,建议升级到最新稳定版(如1.15.0及以上),避免版本不匹配引发的反射问题。
内容的提问来源于stack exchange,提问作者Nikos M
相关产品推荐
相关产品推荐

