【问题标题】:Retrofit and Proguard error改造和 Proguard 错误
【发布时间】:2015-12-25 02:24:04
【问题描述】:

在使用 proguard 进行改造时出现以下异常(注意,没有 Proguard 一切正常):

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'

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

【问题讨论】:

    标签: android gson proguard retrofit


    【解决方案1】:

    检查以确保也为 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  ----------
    

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多