当Proguard激活时无法创建调用适配器导致崩溃

5

我希望在我的项目中使用ProGuard。我启用了选项minifyEnabled。当我打开使用库Retrofit2的活动时,应用程序会崩溃,并显示以下信息:

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

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.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个回答

7

从Retrofit的Github页面中,有一个部分解释如何在使用Proguard时进行操作:

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

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

在进行Proguard更改之前,请先尝试此配置。


1
哇!谢谢。对不起,这个问题很蠢,我是Proguard的新手。 - Mansur Nashaev
1
@MansurNashaev 不是一个愚蠢的问题,对于初学者来说,Proguard可能会令人困惑,所幸Square通常使用Proguard配置块记录他们的API。祝编码愉快! - kandroidj
@inner_class7 是的,但是Proguard确实非常有用。 - M D
我得到了负数,所以我觉得这太傻了。非常感谢你,你帮了我很多。 - Mansur Nashaev
在添加上述行后,我遇到了nullpointerexception异常。请帮我解决与问题描述中相同的问题。 - Naveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接