gson-plugin告別Json資料型別不一致(一)

月籠冰泉發表於2019-01-19

一、目錄

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.** { *; }

相關文章