2013-05-15 39 views
7

Tôi đang sử dụng Gson trong ứng dụng của tôi và cho rằng, tôi đang sử dụng một số lớp học với tên giống như một trong sử dụng Json. Ứng dụng của tôi hoạt động tốt, Nhưng trong khi viết proguard, ứng dụng bị treo, tôi đoán một số lớp đang co lại. lỗi của tôi là:Proguard vấn đề trong khi sử dụng GSON

java.lang.ClassCastException: com.google.gson.internal.StringMap không thể được đúc để com.sample.package.GsonClass

+0

này không có vẻ lỗi Proguard ... –

+0

Tôi đã thử nó với Proguard ra, và nó hoạt động tốt – Jithu

Trả lời

18

Bạn cần phải thêm những dòng này vào Proguard của bạn để lớp gson được giữ khi đăng ký ứng dụng của bạn ..

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

đây là liên kết để người đứng đầu sửa đổi tệp đó: 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. ** {*; } nó hoạt động cho tôi nhưng khi tôi áp dụng ngược lại trên apk, tôi có tất cả các lớp mô hình không thay đổi thành viên, nó phá vỡ mục đích bảo mật, không có tùy chọn nào khác, chúng ta cũng có thể làm hỏng mô hình? – umesh

+1

Tôi cũng phải thêm '-keepattributes * Chú thích *' –

1

Một lý do khác là: trước khi sử dụng

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

bạn nên xây dựng typeToken đúng, như thế này:

Type type = new TypeToken<List<T>>(){}.getType(); 
List<T> list = gson.fromJson(jsonString,type) 
Các vấn đề liên quan