Java Unified SDK 完全切换到 Gson

一直以来 Java Unified SDK 都使用 fastjson 来进行 JSON 解析,最近由于 fastjson 出现了一些兼容性方面的问题,根据不少开发者的建议,我们将 Java Unified SDK 底层的 JSON 解析模块完全切换到了 Gson。当前最新的版本是 7.0.0-SNAPSHOT,已经发布到了 Sonatype OSSRH (OSS Repository Hosting),欢迎大家试用并及时给我们反馈。

如何升级

开发者在业务层使用 Java Unified SDK 与 JSON 解析库,主要有如下三种情形:

  1. 业务层并没有特别使用 JSON 解析库,JSON 解析属于 Java Unified SDK 的内部实现细节,一般情况下开发者感知不到这一改变,所以这时候应用层可以无缝切换。
  2. 业务代码中因 Java Unified SDK 的原因顺带使用了部分 fastjson 核心类型(例如 JSONObject 和 JSONArray),要切换到最新版就需要去掉这些 fastjson 核心类的使用。出于兼容目的 Java Unified SDK 也提供了完全相同的 API 接口,所以开发者在升级的时候只需要将引用的包名由 com.alibaba.fastjson 替换成 cn.leancloud.json 即可,例如:
//import com.alibaba.fastjson.JSON
//import com.alibaba.fastjson.JSONObject
//import com.alibaba.fastjson.JSONArray

import cn.leancloud.json.JSON
import cn.leancloud.json.JSONObject
import cn.leancloud.json.JSONArray
  1. 业务层自主使用了 fastjson 解析库,例如访问了 LeanCloud 之外的 REST API Server,强依赖 fastjson 进行了数据解析,此时最好不要升级到新版本(除非能容忍同时引入 fastjson 和 Gson 两套解析框架)。

参考 demo:

其他问题:

  1. 升级到 7.0.0-SNAPSHOT 之后,Android Studio 打包时出现 RuntimeException,出错信息如下:
java.lang.RuntimeException
        at org.objectweb.asm.ClassVisitor.visitModule(ClassVisitor.java:148)
        at org.objectweb.asm.ClassReader.readModule(ClassReader.java:731)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:632)
        at com.google.firebase.perf.plugin.instrumentation.Instrument.instrument(Instrument.java:151)
        at com.google.firebase.perf.plugin.instrumentation.Instrument.instrumentClassesInJar(Instrument.java:100)

按照这里的解释,可以通过升级 Android Gradle plugin -> 3.5.3, Gradle -> v5.5 解决。

  1. 能不能让开发者配置使用 fastjson 还是 Gson?

我们有计划将 Java Unified SDK 核心代码和 JSON 解析库分开,以后开发者可以根据自己的需求配置使用 Gson 或者 fastjson,类似于 retrofit2 的 converter factory,开发排期则要视开发者的需求而定。

评论

Loading comments ...