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

时间:2018-01-10 15:56:39

标签: android retrofit2 proguard minify

我正在我的应用程序中执行ProGuard:

        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

当我尝试使用Retrofit2进行http调用时,我得到了异常:

  

java.lang.IllegalArgumentException:缺少@GET URL或@Url参数。

Service是:

interface ContentService {

    @GET
    fun getCMSCon(@Url url: String): Single<CMSCon>

}

minifyEnabled falseshrinkResources false

时不会发生这种情况

我在互联网上进行了一项研究,最后我将proguard-rules.pro修改为:

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

-keepattributes RuntimeVisibleAnnotations
-keepattributes RuntimeInvisibleAnnotations
-keepattributes RuntimeVisibleParameterAnnotations
-keepattributes RuntimeInvisibleParameterAnnotations

-keepattributes EnclosingMethod

-keepclasseswithmembers class * {
    @retrofit2.* <methods>;
}

-keepclasseswithmembers interface * {
    @retrofit2.* <methods>;
}

但没有改变。

@Url和字面值传递res,以检查Flavors是否存在问题。

1 个答案:

答案 0 :(得分:2)

解决方案是在func removeSpecificCustomAnnotation( annotationArray: [CustomPointAnnotation], annotationIdToRemove: String, viewController: HasMapView) { print("\(viewController.mapView)") } 中描述的任何调用中将@Keep应用为服务:

interface