2013-05-15 13 views
7

Ich benutze Gson in meiner Anwendung und dafür verwende ich einige Klassen mit dem gleichen Namen wie der in Json verwenden. Meine Anwendung funktioniert gut, aber beim Schreiben von Proguard stürzt die Anwendung ab, ich denke, einige der Klassen schrumpfen. mein Fehler ist:Proguard Problem bei der Verwendung von GSON

java.lang.ClassCastException: com.google.gson.internal.StringMap nicht

+0

dies scheint nicht der proguard Fehler ... –

+0

ich es mit aus proguard versucht, und es funktioniert gut – Jithu

Antwort

18

Sie zu com.sample.package.GsonClass gegossen werden müssen diese Zeilen hinzufügen zu Ihre proguard so dass Gson Klasse gehalten wird, während die App ..

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

hier ist der Link zu dem Kopf Überarbeitung dieser Datei: http://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard-example/proguard.cfg –

+1

-halten Sie die Klasse com.google.gson.examples. android.model. ** {*; } es funktioniert für mich, aber wenn ich reverse engg auf apk anwendete, bekam ich alle Modellklassen mit nicht ändern in den Mitgliedern, bricht es den Sicherheitszweck, gibt es keine andere Wahl, können wir Modell auch verschleiern? – umesh

+1

Ich musste auch hinzufügen -keepattributes * Annotation * ' –

1

Ein weiterer Grund Unterzeichnung ist: vor dem Gebrauch

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

sollen Sie die richtigen typeToken, wie dieses Konstrukt:

Type type = new TypeToken<List<T>>(){}.getType(); 
List<T> list = gson.fromJson(jsonString,type) 
Verwandte Themen