2017-02-21 75 views
1

我工作的應用程序,目前使用谷歌GSON 1.7.1庫。它一切正常,但我想更新到最新版本。試圖更新到2.4,並在應用程序的調試版本,它運作良好。谷歌Gson 2.4 minifyEnable真正的問題

我最近嘗試在發佈版本上運行應用程序,突然JSON解析機制不起作用。將gson lib恢復到1.7.1可以解決問題,但我仍然希望將其更新爲最新版本。

我注意到的是,如果我在發佈版本上設置minifyEnabledfalse,我開始再次獲取數據(解析機制起作用)。

有沒有人知道關於minifyEnabled true和最新的gson lib的問題?

在我proguard的規則文件,我有相關的GSON LIB以下項目:

-keepclassmembers class com.myapp.data.beans.json.** { 
    private <fields>; 
} 
-keep class sun.misc.Unsafe { *; } 
-keep class com.myapp.ui.views.** { *; } 
-keepattributes Signature 
-keepattributes *Annotation* 

我也嘗試添加

-keep class * implements com.google.gson.TypeAdapterFactory 
-keep class * implements com.google.gson.JsonSerializer 
-keep class * implements com.google.gson.JsonDeserializer 

按照谷歌GSON樣本config文件,但它不有什麼區別。

回答

0

您需要告訴proguard以保持類(字段和方法),並且將通過GSON進行序列化/反序列化。

舉例來說,如果你在包com.google.gson.examples.android.model你的所有車型,您需要添加以下規則來ProGuard的

-keep class com.google.gson.examples.android.model.** { *; } 

看看this Gson proguard official example,並嘗試在你的項目中使用這些規則。

+0

我已經做到這一點與 '-keepclassmembers類com.myapp.data.beans.json ** { 私人。 }' 我也保留相關類(但我忘了在最初的文章中加入) –

+0

嘗試擴大規則。我在答案中發佈的規則是最廣泛的規則,所以我會給它一個去,然後我會縮小它,如果它的工作。例如,你確定bean中的所有字段都是私有的嗎?嘗試從proguard規則中刪除'private'。 –

+0

好的。正如我在之前的評論中所說的,我已經爲反序列化過程保留了模型類。我也刪除了'私人'規則。另外,是的,我確定我的所有領域都是私人的 - 因此是規則。 '-keep class com.myapp.data.beans。** -keepclassmembers class com.myapp.data.beans。** {*; }' 仍然不起作用。另外,如果proguard配置錯誤,那麼反序列化過程就不適用於庫的1.7.1版本。 –