一、目錄
1.gson-plugin告別Json資料型別不一致(一)
2.gson-plugin基礎原始碼分析(二)
3.gson-plugin深入原始碼分析(三)
4.gson-plugin如何在JitPack釋出(四)
看完這4篇文章,對Gson解析會有更加深刻的認識,對Android的編譯流程會有更加深刻的認識,寫Android Plugin外掛不在話下,修改Java位元組碼小意思,釋出一個開源專案so easy!
二、專案地址
專案地址:github-gson-plugin
三、gson-plugin
強化Android-Json解析的外掛,解決Android-Json解析資料型別轉換異常,不影響對Gson庫的使用
四、誕生背景
1.Android主要開發語言是Java,屬於強資料型別語言,不少公司後臺開發採用的是PHP,屬於弱資料型別的語言。
2.客戶端與伺服器在進行資料傳輸的過程中,常常因為某個欄位資料型別不一致,導致客戶端gson解析失敗,從而導致整個頁面的資料均無法展示。
五、功能描述
1.當某個欄位解析失敗的時候,跳過該欄位繼續解析其它欄位,保證其它正常資料可以展示出來。
2.當某個欄位解析失敗的時候,通過觀察者模式,將異常丟擲,開發者在收到異常後可以進行相應的處理(如將異常日誌上傳到伺服器,然後推動服務端RD解決)。
3.不影響對Gson庫的使用。
六、原理說明
侵入編譯流程,在編譯過程中,修改gson庫的位元組碼,修改gson解析相關的方法,在資料型別不一致的時候,跳過當前欄位的解析。
七、接入文件
gson-plugin 接入文件
1.工程根目錄加入repositories
buildscript {
repositories {
maven { url `https://jitpack.io` }
}
}
allprojects {
repositories {
maven { url `https://jitpack.io` }
}
}
2.工程根目錄build.gradle加入ClassPath
dependencies {
classpath `com.github.LianjiaTech:gson-plugin:2.0.1`
}
3.工程app目錄build.gradle加入依賴
apply plugin: `com.ke.gson.plugin`
4.可選呼叫(監聽異常json欄位,建議收到後上報給伺服器)
ReaderTools.setListener(new ReaderTools.JsonSyntaxErrorListener() {
@Override
public void onJsonSyntaxError(String exception, String invokeStack) {
//upload error info to server
Log.e("test", "json syntax exception: " + exception);
Log.e("test", "json syntax invokeStack: " + invokeStack);
}
});
5.新增混淆keep
-keep class com.google.gson.** { *; }
-keep class com.ke.gson.** { *; }