8

私は自分のアプリケーションで Gson を使用しています。そのために、Json を使用しているものと同じ名前のクラスをいくつか使用しています。私のアプリケーションはうまく動作しますが、proguard を書いている間にアプリケーションがクラッシュし、いくつかのクラスが縮小していると思います。私のエラーは:

java.lang.ClassCastException: com.google.gson.internal.StringMap を com.sample.package.GsonClass にキャストできません

4

2 に答える 2

22

アプリの署名中に gson クラスが保持されるように、これらの行をプロガードに追加する必要があります。

##---------------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  ----------
于 2013-05-15T12:20:50.520 に答える
3

もう一つの理由は: 使用前に

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

次のように、正しい typeToken を作成する必要があります。

Type type = new TypeToken<List<T>>(){}.getType();
List<T> list = gson.fromJson(jsonString,type)
于 2015-07-29T06:35:30.047 に答える