Proguard & Retrofit 错误

Posted

技术标签:

【中文标题】Proguard & Retrofit 错误【英文标题】:Proguard & Retrofit error 【发布时间】:2016-09-09 20:59:12 【问题描述】:

我想在我的项目中使用 ProGuard。我激活了 minifyEnabled 选项。当我打开使用库 Retrofit2 的活动时,应用程序崩溃并显示此错误:

无法为接口 retrofit2.Call 创建调用适配器

java.lang.RuntimeException: Unable to start activity ComponentInfocom.gatafan.mydeen/com.gatafan.mydeen.ActivityPlaces:
        java.lang.IllegalArgumentException: Unable to create call adapter for interface retrofit2.Call
for method i.a
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
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:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: Unable to create call adapter for interface retrofit2.Call
for method i.a
at retrofit2.ServiceMethod$Builder.a(Unknown Source)
at retrofit2.ServiceMethod$Builder.b(Unknown Source)
at retrofit2.ServiceMethod$Builder.a(Unknown Source)
at retrofit2.Retrofit.a(Unknown Source)
at retrofit2.Retrofit$1.invoke(Unknown Source)
at com.gatafan.mydeen.api.$Proxy1.a(Native Method)
at com.gatafan.mydeen.api.VenueManager.requestFoursquare(Unknown Source)
at com.gatafan.mydeen.ActivityPlaces.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:5264)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
... 11 more
Caused by: java.lang.IllegalArgumentException: Call return type must be parameterized as Call<Foo> or Call<? extends Foo>
        at retrofit2.Utils.e(Unknown Source)
at retrofit2.ExecutorCallAdapterFactory.a(Unknown Source)
at retrofit2.Retrofit.a(Unknown Source)
at retrofit2.Retrofit.a(Unknown Source)
... 21 more

【问题讨论】:

【参考方案1】:

在 Retrofit 的 github 页面中,有一节解释了使用 proguard 时的操作:

PROGUARD 如果您在项目中使用 Proguard,则将以下行添加到您的配置中:

-dontwarn retrofit2.**
-keep class retrofit2.**  *; 
-keepattributes Signature
-keepattributes Exceptions

先尝试此配置,然后再继续进行 proguard 更改

【讨论】:

哇!谢谢你。抱歉这个愚蠢的问题,我是 Proguard 的新手 @MansurNashaev 不是一个愚蠢的问题,proguard 在刚开始时可能会令人困惑,幸运的是,square 通常使用 proguard 配置块记录他们的 api。编码快乐! @inner_class7 是的,但是 Proguard 真的很有用 我得到了减号,所以我觉得这太傻了。非常感谢,你帮了我很多 在添加上述行后,我得到了 nullpointerexception。请帮助解决我在问题中提到的问题

以上是关于Proguard & Retrofit 错误的主要内容,如果未能解决你的问题,请参考以下文章

Retrofit2 proguard 删除参数

Retrofit2 - 缺少 @GET URL 或 @Url 参数 - Proguard

Proguard 不再适用于 Retrofit

将 proguard 与 retrofit2 和 rxjava 一起使用时出错

Proguard for Wire + Retrofit NoSuchMethodException

ProGuard for Android 和 Retrofit2 Converter Gson?