praj praj - 1 year ago 532
Android Question

ProGuard for Android and Retrofit2 Converter Gson?

i am using ProGuard in my project but its giving wrong data in new Gson().toJson(Request);

i am getting out put


instead of


My ProGuard rule

-dontwarn okio.**
-dontwarn retrofit2.Platform$Java8
-dontwarn sun.misc.Unsafe
-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepclassmembers class rx.internal.util.unsafe.** {
long producerIndex;
long consumerIndex;

-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
-keep class** { *; }
-keep class** { *; }

and i am using

compile 'com.squareup.retrofit2:converter-gson:2.0.0'

is there a new recommended ProGuard configuration for retrofit2:converter-gson in Android?

Answer Source

you either want to keep the class you are using with gson or use @SerializedName annotation.

option 1 (keep class)

// all classes in a package
-keep class** { *; }
// or a specific class
-keep class { *; }

option 2 (use @SerializedName):

public class YourJsonClass{
   @SerializedName("name") String username;

   public MyClass(String username) {
     this.username = username;

with the second option proguard still obfuscates the class and field names but gosn can use the annotation to get the correct name for each field