When I add Retrofit 2.4.0 library to android project >
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
and set minifyEnabled {true}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
and then add these rules to proguard-rules.pro
-keep class com.squareup.** { *; }
-keep interface com.squareup.** { *; }
-keep class retrofit2.** { *; }
-keep interface retrofit2.** { *;}
-keep interface com.squareup.** { *; }
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
-dontwarn rx.**
-dontwarn retrofit2.**
-dontwarn okhttp3.**
-dontwarn okio.**
Finally built and generated signed apk successfully but the issue is when run the ( release apk) > Retrofit requests not send and return { null } ..
Whats the solution Please!
maybe because of other library work with retrofit like your downloader or parser.
important notice :
add rule to keep your model classes and subjects that work with parser like :
-keep class com.address_package.** { *; }
if you use okhttp or Okhttp3 with retrofit added below rules
note :and check your parser proguard rules too
LIBRARY: OkHttp
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
-dontwarn okio.**
okhttp3
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
Answer:
Your Proguard rules work for Retrofit, but they’re also obfuscating the model classes that you use to serialize/deserialize your data. Their names are important as Retrofit/Gson matches them to do serializing/deserializing. Proguard turns them into gibberish like a
and b
so Retrofit/Gson cannot make sense of them.
Depending on your package setup, you need to add the following like amin mahmodi mentioned.
-keep class your.package.name.models.** { *; }
Tags: javajava