2013-05-15 6 views
7

Я использую Gson в своем приложении, и для этого я использую некоторые классы с именем так же, как и при использовании Json. Мое приложение работает хорошо, но при написании proguard, сбои приложений, я думаю, некоторые из классов сокращаются. моя ошибка:Проблема Proguard при использовании GSON

java.lang.ClassCastException: com.google.gson.internal.StringMap не может быть приведен к com.sample.package.GsonClass

+0

это не кажется, ошибка ProGuard ... –

+0

Я попробовал это из ProGuard, и она работает хорошо – Jithu

ответ

18

Вам нужно добавить эти строки ваш ProGuard так, что класс 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 ---------- 
+1

здесь ссылку на голове пересмотр этого файла: http://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg –

+1

-keep класс com.google.gson.examples. android.model. ** {*; } это работает для меня, но когда я применил обратный engg на apk, я получил все классы моделей без изменения членов, это нарушает цель безопасности, нет ли другой опции, мы тоже можем запутать модель? – 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) 
Смежные вопросы