2013-05-15 8 views
7

私は自分のアプリケーションでGsonを使用しています。そのために、Jsonを使用する場合と同じ名前のクラスを使用しています。私のアプリケーションはうまくいくが、プログアードを書いている間にアプリケーションがクラッシュすると、クラスのいくつかが縮小しているようだ。 私のエラーは次のとおりです。GSON使用時のProguardの問題

とjava.lang.ClassCastException:com.google.gson.internal.StringMapあなたはこれらの行を追加する必要がありますcom.sample.package.GsonClass

+0

これはProGuardのエラーと思われません... –

+0

私はProGuardのでそれを試みたが、それがうまく機能 – Jithu

答えて

18

にキャストすることはできませんあなたのアプリに署名しながら、gsonクラスが保たれるように、あなたのProGuardの..

##---------------Begin: proguard configuration for Gson ---------- 
# Gson uses generic type information stored in a class file when working with fields. Proguard 
# removes such information by default, so configure it to keep all of it. 
-keepattributes Signature 


# Gson specific classes 
-keep class sun.misc.Unsafe { *; } 
#-keep class com.google.gson.stream.** { *; } 

# Application classes that will be serialized/deserialized over Gson 
-keep class com.google.gson.examples.android.model.** { *; } 

##---------------End: proguard configuration for Gson ---------- 
+1

ここで頭へのリンクですそのファイルのリビジョン:http://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg –

+1

-keep class com.google.gson.examples。 android.model。** {*; } それは私のために働くが、私はapkの逆のenggを適用すると、私はメンバで変更されていないすべてのモデルクラスを持って、それはセキュリティの目的を破る、他のオプションはない、我々はあまりにもモデルを難読化することができますか? – umesh

+1

私も '-keepattributes * Annotation *'を追加する必要がありました –

1

もう一つの理由は、次のとおりです。使用前に

List<T> list = gson.fromJson(jsonString, type); 

正しいtypeTokenを構築する必要があり、このように:

Type type = new TypeToken<List<T>>(){}.getType(); 
List<T> list = gson.fromJson(jsonString,type) 
関連する問題