当前位置: 首页 > 知识库问答 >
问题:

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

宇文航
2023-03-14

我在我的Android应用程序中使用GSON来解析数据。我已经在模型对象中添加了枚举。添加枚举后,我的应用程序开始崩溃。当我让runProguard假的时候,一切都很好。当程序是真的时,我做了我能在网上找到的一切来修复这个问题。但还是没运气。

我已经在proguard-rule文件中做了以下事情

-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)

共有1个答案

钱安和
2023-03-14
-keepclassmembers enum * { *; }

或者使用以下方法:

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

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

 类似资料:
  • 在将DexGuard从7.0.12更新到7.1.22之后,我遇到了Enum交换机崩溃。 只有当DexGuard在我们的项目上运行时才会发生这种情况(我想这是由ProGuard问题引起的)。 如果使用硬编码值,则不会发生崩溃。 当然,我希望避免使用硬编码值。 发生的崩溃如下 这发生在说明的行上(见下文) 应用程序崩溃的一些示例代码(鉴于MyEnum当然是Enum): 假设为1。 如果我改变到它的工作

  • 经过几天的计划,我刚刚开始为我的聊天应用程序编写一些代码,但问题是,在Gradle Build完成并将应用程序安装在我的设备上之后,它一直在崩溃。我创建了一个预计会打开新活动的按钮,但它没有这样做,而是崩溃了。在我编写任何代码之前,一切都正常,应用程序打开,logcat没有显示任何错误。以下是错误: 我试着遵循其他一些建议,但都不起作用。以下是我的代码片段: }

  • 问题内容: 我的应用程序在没有启用proguard的情况下可以完美运行,但是当我启用它时,该应用程序立即崩溃。我尝试了配置中的许多组合都无济于事。 有什么我应该保留的东西,我丢失了吗? proguard配置:https : //gist.github.com/hanleyhansen/99fc07807950bae8e4f5 完整的日志:https ://gist.github.com/hanle

  • 问题内容: 每次我从Eclipse导出签名应用程序并将apk文件安装到手机上时,该应用程序都会崩溃。这仅在启用Proguard的情况下发生。 这是我的保护文件 我运行了adb logcat命令来检查崩溃报告。以下是我认为很重要的报告摘要: 第二段: 如果有人可以帮助我,我将非常感谢并接受您的回答。 更新: 所以我将这些添加到我的proguard文件中 现在启用Proguard时出现与Jackson

  • 我创建了一个应用程序,在Android marshmallow中崩溃,而在under版本中我的应用程序正常工作。 这怎么可能?这是我的清单代码: 这是分级代码: 我读到你必须在代码中修改一些东西,使其与AndroidMarshmallow兼容。 我该如何解决问题呢?