Java 在GSON上运行Proguard时应用程序崩溃(使用枚举)
我正在Android应用程序中使用GSON解析数据。我在模型对象中添加了一个枚举。添加枚举后,我的应用程序开始崩溃。当我将runProguard设置为false时,一切正常。当这个程序是真的时,我尽我所能在互联网上解决这个问题。但还是没有运气 我已经在proguard规则文件中完成了以下操作Java 在GSON上运行Proguard时应用程序崩溃(使用枚举),java,android,json,gson,assertion,Java,Android,Json,Gson,Assertion,我正在Android应用程序中使用GSON解析数据。我在模型对象中添加了一个枚举。添加枚举后,我的应用程序开始崩溃。当我将runProguard设置为false时,一切正常。当这个程序是真的时,我尽我所能在互联网上解决这个问题。但还是没有运气 我已经在proguard规则文件中完成了以下操作 -keep class com.google.** { *; } -keepattributes *Annotation* -keepattributes Signature -keepclassmem
-keep class com.google.** { *; }
-keepattributes *Annotation*
-keepattributes Signature
-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }
枚举示例:
public enum TypeX {
@SerializedName("live")
LIVE,
@SerializedName("upcoming")
UPCOMING,
@SerializedName("replay")
REPLAY; }
我的堆栈跟踪
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)
java.lang.AssertionError
位于com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter。(未知来源)
位于com.google.gson.internal.bind.TypeAdapters$26.create(未知来源)
位于com.google.gson.gson.getAdapter(未知来源)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory$1。(来源不明)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory.CreateBundField(未知源)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory.getBoundFields(未知源)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory.create(未知源)
位于com.google.gson.gson.getAdapter(未知来源)
位于com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(未知源)
位于com.google.gson.gson.getAdapter(未知来源)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory$1。(来源不明)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory.CreateBundField(未知源)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory.getBoundFields(未知源)
位于com.google.gson.internal.bind.ReflectTypeAdapterFactory.create(未知源)
位于com.google.gson.gson.getAdapter(未知来源)
位于com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(未知源)
位于com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(未知源)
位于com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(未知源)
位于com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(未知源)
位于com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(未知来源)
位于com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(未知来源)
位于com.google.gson.gson.toJson(未知来源)
位于com.google.gson.gson.toJson(未知来源)
位于com.google.gson.gson.toJson(未知来源)
位于com.google.gson.gson.toJson(未知来源)
位于com.theice.gsonapp.app.MainActivity.a(未知来源)
位于com.theice.gsonapp.app.MainActivity.onCreate(未知源)
位于android.app.Activity.performCreate(Activity.java:5231)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
在android.app.ActivityThread.access$800(ActivityThread.java:135)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5017)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
在dalvik.system.NativeStart.main(本机方法)
应使用以下规则解决此问题:
-keepclassmembers enum * { *; }
或使用以下方法:
-keepclassmembers enum com.your.package.** { *; }
相关回答:我通过在我的proguard规则文件中添加这些规则解决了这个问题:
# GSON.
-keepnames class com.google.gson.** {*;}
-keepnames enum com.google.gson.** {*;}
-keepnames interface com.google.gson.** {*;}
-keep class com.google.gson.** { *; }
-keepnames class org.** {*;}
-keepnames enum org.** {*;}
-keepnames interface org.** {*;}
-keep class org.** { *; }
-keepnames class com.yourpackagename.net.** {*;}
-keepnames enum com.yourpackagename.net.** {*;}
-keepnames interface com.yourpackagename.net.** {*;}
-keep class com.yourpackagename.net.** { *; }
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
请核实以下事项-
这对我来说是正确的答案。在proguard中添加以下行解决了我的问题:-keepclassmembers enum*{*;}帮助了我。谢谢你的兄弟