You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:24:58