Proguard c retrofit

Делаю обфускацию своего кода нашел интересное решение добавление keep правила

-keepattributes !*Annotation*

Это убирает метоинформацию, и делает код, как по мне, менее читабельным но заметил что удаляются аннотации с retrofit interface и выглядит так

public interface SiApi {
    Object b(String var1, Continuation<? super FirstAction> var2);

    Object e(String var1, Continuation<? super FirstAction> var2);

    Object c(String var1, Continuation<? super FirstAction> var2);

    Object a(String var1, Continuation<? super FirstAction> var2);

    Object d(String var1, Continuation<? super FirstAction> var2);

    Object a(RequestBody var1, RequestBody var2, Part var3, Continuation<? super Unit> var4);

    Object a(int var1, Continuation<? super NextAction> var2);
}

а хотелось бы такой вид

public interface SiApi {
   @GET("***")
    Object b(String var1, Continuation<? super FirstAction> var2);

@GET("***")
    Object e(String var1, Continuation<? super FirstAction> var2);

@GET("***")
    Object c(String var1, Continuation<? super FirstAction> var2);

@GET("***")
    Object a(String var1, Continuation<? super FirstAction> var2);

@GET("***")
    Object d(String var1, Continuation<? super FirstAction> var2);

 @Multipart
    @POST("***")
    Object a(RequestBody var1, RequestBody var2, Part var3, Continuation<? super Unit> var4);

@GET("***")
    Object a(int var1, Continuation<? super NextAction> var2);
}

Как сохранить аннотации для отдельных классов?


Ответы (1 шт):

Автор решения: Danil Apsadikov

Proguard удаляет аннотации и меняет название переменных из-за этого Retrofit не понимает как правильно создать объект.

Добавь правило для Proguard, чтобы он не трогал классы

-keep class package.to.yourmodels.** { *; }
→ Ссылка