Generates keep rules for types mentioned in generic parameter positions of Retrofit service methods.
Given a service method like
@GET("users/{id}")
Call<User> getUser(
@Path("id") String id);If you execute this request and do not actually use the returned User instance, R8 will remove it
and replace the return type as Call<?>. This fails Retrofit's runtime validation since a wildcard
is not a valid type to pass to a converter. Note: this removal only occurs if the Retrofit's service
method definition is the only reference to User.
This module contains an annotation processor which looks at each Retrofit method and generates
explicit -keep rules for the types mentioned.
Add it to Gradle Java projects with
annotationProcessor 'com.squareup.retrofit2:response-type-keeper:<version>'Or Gradle Kotlin projects with
ksp 'com.squareup.retrofit2:response-type-keeper:<version>'For other build systems, the com.squareup.retrofit2:response-type-keeper needs added to the Java
compiler -processor classpath.
For the example above, the annotation processor's generated file would contain
-keep,allowoptimization,allowshrinking,allowobfuscation class com.example.User
This works for nested generics, such as Call<ApiResponse<User>>, which would produce:
-keep,allowoptimization,allowshrinking,allowobfuscation class com.example.ApiResponse
-keep,allowoptimization,allowshrinking,allowobfuscation class com.example.User
It also works on Kotlin suspend functions which turn into a type like
Continuation<? extends User> in the Java bytecode.