当我在GSON(使用枚举)上运行Proguard时,应用程序崩溃

brc7rcf0  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(165)

我在我的Android应用程序中使用GSON来解析数据。我在我的Model对象中添加了一个枚举。添加枚举后,我的应用程序开始崩溃。当我将runProfuard设置为false时,一切都正常。当程序为true时,我尽我所能在互联网上找到解决问题的方法。但仍然没有运气。
我已经在proguard-rule文件中做了以下事情

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

枚举填充示例:

  1. public enum TypeX {
  2. @SerializedName("live")
  3. LIVE,
  4. @SerializedName("upcoming")
  5. UPCOMING,
  6. @SerializedName("replay")
  7. REPLAY; }

我的堆栈跟踪

  1. java.lang.AssertionError
  2. at com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter.<init>(Unknown Source)
  3. at com.google.gson.internal.bind.TypeAdapters$26.create(Unknown Source)
  4. at com.google.gson.Gson.getAdapter(Unknown Source)
  5. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(Unknown Source)
  6. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(Unknown Source)
  7. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(Unknown Source)
  8. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(Unknown Source)
  9. at com.google.gson.Gson.getAdapter(Unknown Source)
  10. at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(Unknown Source)
  11. at com.google.gson.Gson.getAdapter(Unknown Source)
  12. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(Unknown Source)
  13. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(Unknown Source)
  14. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(Unknown Source)
  15. at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(Unknown Source)
  16. at com.google.gson.Gson.getAdapter(Unknown Source)
  17. at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(Unknown Source)
  18. at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(Unknown Source)
  19. at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(Unknown Source)
  20. at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(Unknown Source)
  21. at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(Unknown Source)
  22. at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(Unknown Source)
  23. at com.google.gson.Gson.toJson(Unknown Source)
  24. at com.google.gson.Gson.toJson(Unknown Source)
  25. at com.google.gson.Gson.toJson(Unknown Source)
  26. at com.google.gson.Gson.toJson(Unknown Source)
  27. at com.theice.gsonapp.app.MainActivity.a(Unknown Source)
  28. at com.theice.gsonapp.app.MainActivity.onCreate(Unknown Source)
  29. at android.app.Activity.performCreate(Activity.java:5231)
  30. at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
  31. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
  32. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
  33. at android.app.ActivityThread.access$800(ActivityThread.java:135)
  34. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
  35. at android.os.Handler.dispatchMessage(Handler.java:102)
  36. at android.os.Looper.loop(Looper.java:136)
  37. at android.app.ActivityThread.main(ActivityThread.java:5017)
  38. at java.lang.reflect.Method.invokeNative(Native Method)
  39. at java.lang.reflect.Method.invoke(Method.java:515)
  40. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
  41. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
  42. at dalvik.system.NativeStart.main(Native Method)
9o685dep

9o685dep1#

这应该通过使用以下规则来解决:

  1. -keepclassmembers enum * { *; }

或使用以下命令:

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

相关回答:https://stackoverflow.com/a/30167048/4758255

ki1q1bka

ki1q1bka2#

我通过在proguard-rule文件中添加这些规则来解决此问题:

  1. # GSON.
  2. -keepnames class com.google.gson.**{*;}
  3. -keepnames enum com.google.gson.**{*;}
  4. -keepnames interface com.google.gson.**{*;}
  5. -keep class com.google.gson.**{ *; }
  6. -keepnames class org.**{*;}
  7. -keepnames enum org.**{*;}
  8. -keepnames interface org.**{*;}
  9. -keep class org.**{ *; }
  10. -keepnames class com.yourpackagename.net.**{*;}
  11. -keepnames enum com.yourpackagename.net.**{*;}
  12. -keepnames interface com.yourpackagename.net.**{*;}
  13. -keep class com.yourpackagename.net.**{ *; }
  14. -keepattributes Signature
  15. -keepattributes *Annotation*
  16. -keep class sun.misc.Unsafe { *; }
  17. -keep class com.google.gson.stream.**{ *; }
  18. -keepclassmembers enum * {
  19. public static**[] values();
  20. public static**valueOf(java.lang.String);
  21. }
展开查看全部
lvmkulzt

lvmkulzt3#

请确认以下事项-
1.添加proguard-rules.pro文件添加到应用程序目录中。
1.是否为build.gradle(module:app)文件路径定义中定义的路径正确,如下所示-
如果您有一个新的密码,请使用这个密码。
1.如果以上两个步骤是好的,那么请添加以下行(规则)在progaurd文件-

  • 保留类成员枚举 * { *;}
    1.清理、生成项目并再次运行。

相关问题