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

启用ProGuard后Moshi出现LinkedHashTreeMap类型转换异常求助

问题原因及解决方案

这个崩溃是因为ProGuard混淆了你的数据模型类(SearchItemResponse),导致Moshi无法通过反射识别并解析成目标实体类,只能用默认的LinkedHashTreeMap存储JSON解析结果,最终触发类型转换异常。

你当前的ProGuard规则只覆盖了ViewModel、Retrofit和Moshi的基础组件,遗漏了对自己业务数据模型类的保护,需要添加以下规则:

# 保留response包下所有数据模型类的字段与构造方法,替换为你的实际包名
-keep class com.yourapp.response.** {
    <fields>;
    <init>(...);
}

# 保留Moshi相关注解,确保字段映射关系不丢失
-keepattributes *Annotation*
-keepclassmembers class * {
    @com.squareup.moshi.Json <fields>;
}

# 如果你用Kotlin数据类,需额外保留自动生成的component和copy方法
-keepclassmembers class kotlin.Metadata { *; }
-keepclassmembers class com.yourapp.response.** {
    *** component*();
    *** copy(...);
}

规则说明:

  1. 第一部分规则直接保护你的response包下所有类的字段和构造方法,避免ProGuard修改类名、字段名,保证Moshi能正确匹配JSON字段与实体类属性。
  2. 保留注解属性和Moshi的@Json注解,防止字段映射的关键信息被移除。
  3. 若使用Kotlin数据类,必须保留其自动生成的componentN()和copy()方法,否则Moshi无法正常实例化数据类对象。

替换规则中的com.yourapp.response为你项目中SearchItemResponse所在的实际包名即可解决问题。

内容的提问来源于stack exchange,提问作者TabascoLosco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:12:48