Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在GSON上运行Proguard时应用程序崩溃(使用枚举)_Java_Android_Json_Gson_Assertion - Fatal编程技术网

Java 在GSON上运行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

我正在Android应用程序中使用GSON解析数据。我在模型对象中添加了一个枚举。添加枚举后,我的应用程序开始崩溃。当我将runProguard设置为false时,一切正常。当这个程序是真的时,我尽我所能在互联网上解决这个问题。但还是没有运气

我已经在proguard规则文件中完成了以下操作

-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-rules.pro文件

  • 是否在build.gradle(模块:app)文件路径定义中定义了路径,如下所示-

  • proguard文件GetDefaultProGuard文件('proguard-android-optimize.txt'),'proguard rules.pro'

  • 如果以上两个步骤都可以,那么请在progaurd文件中添加以下行(规则)-

    -keepclassmembers枚举*{*;}

  • 清理、构建项目并再次运行


  • 这对我来说是正确的答案。在proguard中添加以下行解决了我的问题:-keepclassmembers enum*{*;}帮助了我。谢谢你的兄弟