Rafael Ruiz Muñoz
Rafael Ruiz Muñoz

Reputation: 5472

Retrofit2 - Missing either @GET URL or @Url parameter - Proguard

I'm doing ProGuard in my app as:

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

and when I try to do an http call with Retrofit2 I get the exception:

java.lang.IllegalArgumentException: Missing either @GET URL or @Url parameter.

The Service is:

interface ContentService {

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

}

It doesn't happen when minifyEnabled false and shrinkResources false

I took a research on Internet and I ended up modifying the proguard-rules.pro as:

# 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>;
}

but nothing changed.

The @Url is passed from res and literal, to check that there's not a problem with the Flavors.

Upvotes: 3

Views: 3061

Answers (1)

Rafael Ruiz Mu&#241;oz
Rafael Ruiz Mu&#241;oz

Reputation: 5472

Solution would be applying @Keep in any call described in any interface as Service:

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

Upvotes: 2

Related Questions