gso-plugi是强化Adroid-JSON解析的插件,解决Adroid-JSON解析数据类型转换异常,不影响对Gso库的使用。
gso-plugi依赖的sdk:https://github.com/LiajiaTech/gso-plugi-sdk
诞生背景Adroid主要开发语言是Java,属于强数据类型语言,不少公司后台开发采用的是PHP,属于弱数据类型的语言。客户端与服务器在进行数据传输的过程中,常常因为某个字段数据类型不一致,导致客户端gso解析失败,从而导致整个页面的数据均无法展示。
功能描述1.当某个字段解析失败的时候,跳过该字段继续解析其它字段,保证其它正常数据可以展示出来。2.当某个字段解析失败的时候,通过观察者模式,将异常抛出,开发者在收到异常后可以进行相应的处理(如将异常日志上传到服务器,然后推动服务端RD解决)。3.不影响对Gso库的使用。
接入方法1.工程根目录加入repositories
buildscript{repositories{mave{url'https://jitpack.io'}}}allprojects{repositories{mave{url'https://jitpack.io'}}}2.工程根目录build.gradle加入ClassPath
depedecies{classpath'com.github.LiajiaTech:gso-plugi:2.1.0'}3.工程app目录build.gradle加入依赖
applyplugi:'com.ke.gso.plugi'4.可选调用(监听异常jso字段,建议收到后上报给服务器)
ReaderTools.setListeer(ewReaderTools.JsoSytaxErrorListeer(){@OverridepublicvoidoJsoSytaxError(Strigexceptio,StrigivokeStack){//uploaderrorifotoserverLog.e("test","jsosytaxexceptio:"+exceptio);Log.e("test","jsosytaxivokeStack:"+ivokeStack);}});5.添加混淆keep
-keepclasscom.google.gso.**{*;}-keepclasscom.ke.gso.**{*;}性能对比对如下数据进行2000次循环解析:
publicclassTestBea{publicStrigame;publicitage;publicStrigsex;publicbooleais_success;publicStrig[]array;publicList<Strig>list;publicMap<Strig,Strig>map;publicTestBeabea;}使用原生gso结果:第1次:1374ms,第2次:1430ms,第3次:1429ms,平均:1411ms
使用gso-plugi结果:第1次:1503ms,第2次:1381ms,第3次:1418ms,平均:1434ms
结论:gso-plugi比原生gso解析,效率略低(多执行了几行判断逻辑代码),但可忽略不计
原理说明侵入编译流程,在编译过程中,修改gso库的字节码,修改gso解析相关的方法
支持gso库版本支持gso库所有版本
特殊说明2.1.0之前的版本,对Float、Double、Map数据类型的支持不全面,建议使用2.1.0及以上的版本
评论