一直以来 Java Unified SDK 都使用 fastjson 来进行 JSON 解析,最近由于 fastjson 出现了一些兼容性方面的问题,根据不少开发者的建议,我们将 Java Unified SDK 底层的 JSON 解析模块完全切换到了 Gson。当前最新的版本是 7.0.0-SNAPSHOT
,已经发布到了 Sonatype OSSRH (OSS Repository Hosting),欢迎大家试用并及时给我们反馈。
如何升级
开发者在业务层使用 Java Unified SDK 与 JSON 解析库,主要有如下三种情形:
- 业务层并没有特别使用 JSON 解析库,JSON 解析属于 Java Unified SDK 的内部实现细节,一般情况下开发者感知不到这一改变,所以这时候应用层可以无缝切换。
- 业务代码中因 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
- 业务层自主使用了 fastjson 解析库,例如访问了 LeanCloud 之外的 REST API Server,强依赖 fastjson 进行了数据解析,此时最好不要升级到新版本(除非能容忍同时引入 fastjson 和 Gson 两套解析框架)。
参考 demo:
其他问题:
- 升级到 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
解决。
- 能不能让开发者配置使用 fastjson 还是 gson?
我们有计划将 java unified sdk 核心代码和 json 解析库分开,以后开发者可以根据自己的需求配置使用 gson 或者 fastjson,类似于 retrofit2 converter factory,开发排期则要视开发者的需求而定。