Moshi官方ProGuard文件未含@Json<fields>规则,是否遗漏或规则有误?
问题解答
你的ProGuard规则写法本身没问题,但针对你使用的@JsonClass(generateAdapter = true)编译期生成适配器的场景,这条规则是不需要的,这也是Moshi官方proguard配置里没包含它的原因,具体细节如下:
编译期适配器的自动保护机制:当你给数据类加上
@JsonClass(generateAdapter = true)注解后,Moshi会在编译阶段自动生成对应的适配器类。这些生成的适配器类会直接硬编码字段与JSON键的映射关系(比如明确引用User类的name、age字段)。ProGuard在代码优化时,会检测到这些适配器类仍然在引用你的数据类字段,因此不会混淆或删除这些字段,不需要额外规则来保护。你的规则适用的场景:只有当你使用Moshi的反射适配器时(也就是不给数据类加
@JsonClass(generateAdapter = true),依赖Moshi通过反射完成序列化/反序列化),才需要这条规则。此时ProGuard可能会混淆字段名或移除未被直接引用的字段,导致反射无法找到对应字段,或者字段名混淆后与JSON键不匹配,这时候就需要用你写的规则告诉ProGuard保留带有@Json注解的字段。官方配置的侧重点:Moshi官方的proguard规则主要是保护编译期生成的适配器类、保留
@JsonClass等核心注解,确保生成的代码能正常工作。而反射场景的规则需要开发者根据自身使用情况自行添加,因为并非所有用户都会依赖反射适配器。
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

