2013-05-15 12 views
7

Używam Gson w mojej aplikacji i do tego używam niektórych klas o takiej samej nazwie jak ta, która używa Json. Moja aplikacja działa dobrze, ale podczas pisania proguard, awarie aplikacji, wydaje mi się, że niektóre klasy się kurczą. mój błąd to:Problem z programem Proguard podczas korzystania z GSON

java.lang.ClassCastException: com.google.gson.internal.StringMap nie mogą być oddane do com.sample.package.GsonClass

+0

to nie wydaje się, że błąd PROGUARD ... –

+0

próbowałem go z zewnątrz PROGUARD, i to działa dobrze – Jithu

Odpowiedz

18

trzeba dodać te linie do Twój PROGUARD tak, że klasa gson jest utrzymywana podczas podpisywania aplikacji ..

##---------------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

Oto link do głowy wersja tego pliku: 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. ** {*; } to działa dla mnie, ale gdy zastosowałem reverse engg na apk, mam wszystkie klasy modeli z niezmienioną składową, łamie cel bezpieczeństwa, czy nie ma innej opcji, możemy też zaciemnić model? – umesh

+1

Musiałem również dodać '-keepattributes * Adnotacja *' –

1

Innym powodem jest: przed użyciem

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

należy skonstruować poprawną typeToken, tak:

Type type = new TypeToken<List<T>>(){}.getType(); 
List<T> list = gson.fromJson(jsonString,type) 
Powiązane problemy