Application error when running Proguard on GSON (which uses an enumeration)

I use GSON in my Android application for data analysis. I added an enumeration to the Model object. After adding an enumeration, my application started crashing. When I made runProguard false, everything works fine. I did everything I could find on the Internet to fix the problem when the program is correct. But still no luck.

I already did the following in the proguard rules file

-keep class com.google.** { *; } -keepattributes *Annotation* -keepattributes Signature -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } 

Example Enum Stuff:

 public enum TypeX { @SerializedName("live") LIVE, @SerializedName("upcoming") UPCOMING, @SerializedName("replay") REPLAY; } 

My stack trace

 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) 
+7
java json android gson assertion
source share
1 answer

This should be allowed using the following rule:

 -keepclassmembers enum * { *; } 

or use the following:

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

Associated answer: stack overflow

+4
source share

All Articles