Retrofit2 - отсутствует либо @получить URL-адрес или параметр @url - адреса должны быть


Я делаю ProGuard в моем приложении как:

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

И когда я пытаюсь сделать http-вызов с Retrofit2, я получаю исключение:

Java.яз..IllegalArgumentException: отсутствует либо @GET-параметр url-адреса или @URL-адрес.

Service это:

interface ContentService {

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

}

Этого не происходит, когда minifyEnabled false и shrinkResources 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 и буквально, чтобы проверить, нет ли проблем с ароматами.

1 2

1 ответ:

Решение будет применяться @Keep в любом вызове, описанном в любом interface Как Сервис:

@Keep
@GET
fun getCMSConfig(@Url url: String): Single<CMSConfig>