Prevent class member name obfuscation by ProGuard Prevent class member name obfuscation by ProGuard java java

Prevent class member name obfuscation by ProGuard


If you dont want your class members to be obfuscated then use SerializedName annotation provided by Gson. For example:

public class ClassMultiPoints{   @SerializedName("message")   public String message;   @SerializedName("data")   public List<ClassPoints> data;   ...}

Moreover, make sure you do add proper proguard configuration for Gson library too. For example:

##---------------Begin: proguard configuration for Gson ----------# Gson uses generic type information stored in a class file when working with#fields. Proguard removes such information by default, so configure it to keep#all of it.-keepattributes Signature# For using GSON @Expose annotation-keepattributes *Annotation*# Gson specific classes-keep class sun.misc.Unsafe { *; }#-keep class com.google.gson.stream.** { *; }# Application classes that will be serialized/deserialized over Gson-keep class com.google.gson.examples.android.model.** { *; }##---------------End: proguard configuration for Gson ----------

For more info read this.


Thanks Waqas!

I find solution for my case:

-optimizationpasses 5-dump class_files.txt-printseeds seeds.txt-printusage unused.txt-printmapping mapping.txt-optimizations !code/simplification/arithmetic,!field/*,!class/merging*/-allowaccessmodification-repackageclasses ''-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.MapActivity-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-libraryjars  libs/commons-io-2.2.jar-libraryjars  libs/gson-2.2.2.jar-keep public class org.apache.commons.io.**-keep public class com.google.gson.**-keep public class com.google.gson.** {public private protected *;}##---------------Begin: proguard configuration for Gson -----------keepattributes *Annotation*,Signature-keep class com.mypackage.ActivityMonitor.ClassMultiPoints.** { *; }-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints     { public protected *; }-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints { public protected *; }-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints$ClassPoint { public protected *; }# To support Enum type of class members-keepclassmembers enum * { *; } ##---------------End: proguard configuration for Gson ----------

Also I don't use @SerializedName("message") in my class, aboved config work fine without serialization.


I also found I need to -keepclassmembers when using Dexguard's optimise option. Without this several of my model objects failed to deserialise

##---------------Begin: proguard configuration for Gson  ----------# Gson uses generic type information stored in a class file when working with fields. Proguard# removes such information by default, so configure it to keep all of it.-keepattributes Signature# For using GSON @Expose annotation-keepattributes *Annotation*# Application classes that will be serialized/deserialized over Gson, keepclassmembers-keep class com.myapp.model.** { *; }-keepclassmembers class com.myapp.model.** { *; }