2014-04-18 15 views
7

Uyguladığım uygulama, Android uygulamasında verileri ayrıştırmak için GSON kullanıyorum. Model nesnesine bir numara ekledim. Enum ekledikten sonra uygulamam kilitlenmeye başladı. RunProguard'ı yanlış yaptığımda her şey iyi çalışıyor. Program doğru olduğunda sorunu çözmek için internette bulabildiğim her şeyi yaptım. Ama yine de şans yok.GSON üzerinde Proguard'ı çalıştırdığımda (enum kullanan)

Zaten proguard-kural dosyasında

-keep class com.google.** { *; } 

-keepattributes *Annotation* 
-keepattributes Signature 

-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } 

Enum Stuff örneği aşağıdaki şey yapmış

:

public enum TypeX { 
@SerializedName("live") 
LIVE, 

@SerializedName("upcoming") 
UPCOMING, 

@SerializedName("replay") 
REPLAY; } 

Benim yığın izleme Bu kullanılarak çözülmesi gerektiğini

java.lang.AssertionError 
     at com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter.<init>(Unknown Source) 
     at com.google.gson.internal.bind.TypeAdapters$26.create(Unknown Source) 
     at com.google.gson.Gson.getAdapter(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(Unknown Source) 
     at com.google.gson.Gson.getAdapter(Unknown Source) 
     at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(Unknown Source) 
     at com.google.gson.Gson.getAdapter(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(Unknown Source) 
     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(Unknown Source) 
     at com.google.gson.Gson.getAdapter(Unknown Source) 
     at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(Unknown Source) 
     at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(Unknown Source) 
     at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(Unknown Source) 
     at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(Unknown Source) 
     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(Unknown Source) 
     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(Unknown Source) 
     at com.google.gson.Gson.toJson(Unknown Source) 
     at com.google.gson.Gson.toJson(Unknown Source) 
     at com.google.gson.Gson.toJson(Unknown Source) 
     at com.google.gson.Gson.toJson(Unknown Source) 
     at com.theice.gsonapp.app.MainActivity.a(Unknown Source) 
     at com.theice.gsonapp.app.MainActivity.onCreate(Unknown Source) 
     at android.app.Activity.performCreate(Activity.java:5231) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 

cevap

4

izleyen kural:

-keepclassmembers enum * { *; } 

veya kullanım aşağıdadır:

-keepclassmembers enum com.your.package.** { *; } 

İlgili cevap: https://stackoverflow.com/a/30167048/4758255

+0

Bu benim için doğru cevaptır. Proguard'da aşağıdaki satırı eklemek problemimi çözer: -keepclassmembers enum * {*; } –