#========基本指令========= # 设置混淆的压缩比率 0 ~ 7 -optimizationpasses 5 # 混淆时不使用大小写混合,混淆后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 指定不去忽略非公共库的成员 -dontskipnonpubliclibraryclassmembers # 混淆时不做预校验 -dontpreverify # 混淆时不记录日志 -verbose # 忽略警告 -ignorewarning # 代码优化 -dontshrink # 不优化输入的类文件 -dontoptimize # 保留注解不混淆 -keepattributes *Annotation*,InnerClasses # 避免混淆泛型 -keepattributes Signature # 保留代码行号,方便异常信息的追踪 -keepattributes SourceFile,LineNumberTable # 混淆采用的算法 -optimizations !code/simplification/cast,!field/*,!class/merging/* # dump.txt文件列出apk包内所有class的内部结构 -dump class_files.txt # seeds.txt文件列出未混淆的类和成员 -printseeds seeds.txt # usage.txt文件列出从apk中删除的代码 -printusage unused.txt # mapping.txt文件列出混淆前后的映射 -printmapping mapping.txt #========不需混淆的Android类========= -keep public class * extends android.app.Fragment -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.preference.Preference -keep public class * extends android.content.ContentProvider -keep public class * extends android.support.v4.** -keep public class * extends android.support.annotation.** -keep public class * extends android.support.v7.** -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class * extends android.view.View -keep public class com.android.vending.licensing.ILicensingService -keep class android.support.** {*;} #========support-v4包========= -dontwarn android.support.v4.** -keep class android.support.v4.app.** { *; } -keep interface android.support.v4.app.** { *; } -keep class android.support.v4.** { *; } #========support-v7包========= -dontwarn android.support.v7.** -keep class android.support.v7.internal.** { *; } -keep interface android.support.v7.internal.** { *; } -keep class android.support.v7.** { *; } #========support design========= -dontwarn android.support.design.** -keep class android.support.design.** { *; } -keep interface android.support.design.** { *; } -keep public class android.support.design.R$* { *; } #========避免混淆自定义控件类的 get/set 方法和构造函数========= -keep public class * extends android.view.View{ *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } #========关闭 Log日志========= -assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String,int); public static *** d(...); public static *** v(...); public static *** i(...); public static *** e(...); public static *** w(...); } #========避免资源混淆========= -keep class **.R$* {*;} #========避免layout中onclick方法(android:οnclick="onClick")混淆========= -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } #========避免回调函数 onXXEvent 混淆========= -keepclassmembers class * { void *(*Event); } #========避免混淆枚举类========= -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #========Natvie 方法不混淆========= -keepclasseswithmembernames class * { native <methods>; } #========避免Parcelable混淆========= -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #========避免Serializable接口的子类中指定的某些成员变量和方法混淆========= -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } #========WebView混淆配置========= -keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } -keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); public boolean *(android.webkit.WebView, java.lang.String); } -keepclassmembers class * extends android.webkit.webViewClient { public void *(android.webkit.webView, jav.lang.String); }
#========ButterKnife混淆配置=========
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
#========OkHttp3混淆配置=========
-dontwarn com.squareup.okhttp3.**
-keep class com.squareup.okhttp3.** { *;}
-dontwarn okio.**
#-dontwarn okhttp3.logging.** 不注释掉这一句的话,okhttp的网络请求日志会看到
-keep class okhttp3.internal.**{*;}
#========Retrofit2混淆配置========= -dontwarn javax.annotation.** -dontwarn javax.inject.** -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions
#========Glide混淆配置========= -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } #========Gson混淆配置========= -keep class com.google.gson.** {*;} -keep class com.google.**{*;} -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.stream.** { *; } -keep class com.google.gson.examples.android.model.** { *; } -keepattributes EnclosingMethod -keep class com.af.ayg.mall.bean.**{*;} #========Banner混淆配置========= -keep class com.youth.banner.** { *; } #========circleimageview混淆========= -keep class de.hdodenhof.circleimageview.** { *; }