升级Kotlin到1.5.20开启Proguard后Moshi1.12.0反射报错如何解决
故障修复方案
- 升级Moshi依赖至1.12.0及以上版本
Kotlin 1.5.x修改了Kotlin元数据的存储结构,低于1.12.0版本的Moshi无法正确识别新版元数据,是该类报错的高频诱因 - 补全Proguard混淆规则
原有官方规则基础上新增Kotlin元数据保留规则,避免反射时无法读取类信息:# 保留Kotlin元数据供反射使用 -keep class kotlin.Metadata { *; } # 保留所有标注了JsonClass的类及其成员 -keep @com.squareup.moshi.JsonClass class * { <fields>; <init>(...); } - 优先启用Moshi代码生成模式(推荐)
给所有用于JSON序列化/反序列化的Kotlin数据类添加@JsonClass(generateAdapter = true)注解,完全规避反射依赖,既可以避免该类反射错误,也能提升序列化性能:
同步确认build.gradle中已添加Moshi代码生成的依赖配置:@JsonClass(generateAdapter = true) data class YourDataClass( val field1: String, val field2: Int )// kapt 配置 kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version" - 排查特殊类场景
如果存在嵌套内部类、匿名类用作数据结构的场景,需单独给这些类添加保留规则,避免混淆后类名篡改导致反射无法识别。
内容的提问来源于stack exchange,提问作者Alan Lu
相关产品推荐
相关产品推荐

