############################################################################### # General settings. ############################################################################### -verbose # We can debug the ProGuard configuration by instrumenting the code and # checking the log for feedback. Disable the option again for actual releases! #-addconfigurationdebugging # We can also disable the individual processing steps. #-dontshrink #-dontoptimize #-dontobfuscate # Specifically target Android. -android ############################################################################### # Settings to handle reflection in the code. ############################################################################### # Preserve annotated and generated classes for Dagger. -keepclassmembers,allowobfuscation class * { @dagger.** *; } -keep class **$$ModuleAdapter -keep class **$$InjectAdapter -keep class **$$StaticInjection -if class **$$ModuleAdapter -keep class <1> -if class **$$InjectAdapter -keep class <1> -if class **$$StaticInjection -keep class <1> -keepnames class dagger.Lazy # Preserve annotated and generated classes for Butterknife. -keep class **$$ViewBinder { public static void bind(...); public static void unbind(...); } -if class **$$ViewBinder -keep class <1> -keep class **_ViewBinding { (<1>, android.view.View); } -if class **_ViewBinding -keep class <1> # Preserve fields that are serialized with GSON. #-keepclassmembers class com.example.SerializedClass1, # com.example.SerializedClass2 { # ; #} -keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName ; } -keep,allowobfuscation @interface com.google.gson.annotations.** ############################################################################### # Further optimizations. ############################################################################### # If you wish, you can let the optimization step remove Android logging calls. #-assumenosideeffects class android.util.Log { # public static boolean isLoggable(java.lang.String, int); # public static int v(...); # public static int i(...); # public static int w(...); # public static int d(...); # public static int e(...); #} # In that case, it's especially useful to also clean up any corresponding # string concatenation calls. -assumenoexternalsideeffects class java.lang.StringBuilder { public java.lang.StringBuilder(); public java.lang.StringBuilder(int); public java.lang.StringBuilder(java.lang.String); public java.lang.StringBuilder append(java.lang.Object); public java.lang.StringBuilder append(java.lang.String); public java.lang.StringBuilder append(java.lang.StringBuffer); public java.lang.StringBuilder append(char[]); public java.lang.StringBuilder append(char[], int, int); public java.lang.StringBuilder append(boolean); public java.lang.StringBuilder append(char); public java.lang.StringBuilder append(int); public java.lang.StringBuilder append(long); public java.lang.StringBuilder append(float); public java.lang.StringBuilder append(double); public java.lang.String toString(); } -assumenoexternalreturnvalues class java.lang.StringBuilder { public java.lang.StringBuilder append(java.lang.Object); public java.lang.StringBuilder append(java.lang.String); public java.lang.StringBuilder append(java.lang.StringBuffer); public java.lang.StringBuilder append(char[]); public java.lang.StringBuilder append(char[], int, int); public java.lang.StringBuilder append(boolean); public java.lang.StringBuilder append(char); public java.lang.StringBuilder append(int); public java.lang.StringBuilder append(long); public java.lang.StringBuilder append(float); public java.lang.StringBuilder append(double); }