Gson遇上Proguard之踩坑与出坑笔记

最近接触了 Android 上的一个高效的网络请求处理框架——Retrofit,大量使用注解,很好用,这让笔者联系到了 SpringMVC 框架,也是具有丰富的注解。Retrofit 是对 OkHttp 的封装(都是出自 Square 公司之手),而 OkHttp 又是对 Java HttpURLConnection 的一次封装,它们的关系是 HttpURLConnection -> OkHttp -> Retrofit。这三者笔者都有亲自用过,一个比一个好用。

Gson遇上Proguard之踩坑与出坑笔记_第1张图片
Retrofit 如是配置接口

回到正题,Gson 是配合 Retrofit 解析 JSON 而引入的一个库。初次在项目中使用 Retrofit + Gson,一路也是顺风顺水,发起请求回传数据正常。最后,笔者打包了一个测试版给用户,用户反馈说无法获取到数据。于是经过不断排查(过程略),发现了症结所在。因为笔者在打包 APK 开启了 Proguard 混淆,导致 Bean 对象属性名被打乱,而使 Gson 在转换 JSON 数据到 Bean 对象时无法正确注入(或者说映射)属性值。

那为什么在自己测试时没有发现呢?这是由于调试时没有启用混淆。

下面给出笔者的解决方案(找解过程略):

  • 其一,配置 Proguard 规则,留住 Bean 对象属性名。

    配置 Proguard 规则
  • 其二,使用 Gson 提供的 SerializedName() 注解标记映射。

    Gson遇上Proguard之踩坑与出坑笔记_第2张图片
    Gson 注解

总结。出现这个问题其实还是归咎笔者知识的欠缺。记完收工,以备反刍。

你可能感兴趣的:(Gson遇上Proguard之踩坑与出坑笔记)