android - 改造和 Proguard 错误

标签 android gson proguard retrofit

在使用带有混淆器的改造时出现以下异常(请注意,没有混淆器一切正常):

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.path.to.my.model
        at com.path.to.my.callback.onResponse(Unknown Source)
        at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5351)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

我的proguard文件如下:

-dontwarn okio.**
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepattributes Signature
-keepattributes Exceptions

我正在使用的与 Retrofit 相关的依赖项是:

compile 'com.squareup.retrofit:retrofit:2.0.0-beta1'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta1'

为什么会这样?我怎样才能找到问题所在?故障排除的想法将非常有帮助。提前致谢!

最佳答案

检查以确保也为 gson 配置了 proguard。您需要确保与 gson 一起使用的 POJO 没有被混淆并且注释没有被剥离。

注意:您应该替换 com.google.gson.examples.android.model.** { *; 在下面的示例中使用您的模型类。

来自 gson example proguard配置--

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

##---------------End: proguard configuration for Gson  ----------

关于android - 改造和 Proguard 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32812909/

相关文章:

android - ProGuard 和 AdMob 的问题

java - 将 json 解析为 java 对象时出错 : java. lang.NullPointerException

android - 为什么在尝试访问常量值时存在 Unresolved 引用?

java - Android JDBC 不工作 : ClassNotFoundException on driver

java - 我在使用 gson.toJson(Object src) : declares multiple JSON fields named ntMgr 时遇到错误

在发布版本中找不到 Android FileProvider 类

java - 解析 xml 特殊字符问题

java - GSON:JSON反序列化为变量类型(List/String)

java - 将这些字段值排序到映射中

ProGuard 正在删除一些必需的代码?