1、在app目录下面的 build.gradle 下面 添加
buildTypes { debug { minifyEnabled true shrinkResources true zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true shrinkResources true zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
2、在app 目录下 proguard-rules.pro 文件 添加 混淆规则 可根据自己的项目 自定义。
# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改 -optimizationpasses 5 # 混合时不使用大小写混合,混合后的类名为小写 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -printmapping proguardMapping.txt -optimizations !code/simplification/cast,!field/*,!class/merging/* -keepattributes *Annotation*,InnerClasses -keepattributes Signature -keepattributes SourceFile,LineNumberTable # 基本组件 保留 -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.content.ContentProvider -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 # 保留support下的所有类及其内部类 -keep class android.support.** {*;} -dontwarn javax.annotation.** # 保留继承的 -keep public class * extends android.support.v4.** -keep public class * extends android.support.v7.** -keep public class * extends android.support.annotation.** # 保持 native 方法不被混淆 -keepclasseswithmembernames class * { native <methods>;} #保留在Activity中的方法参数是view的方法,这样以来我们在layout中写的onClick就不会被影响 -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } # 保留枚举类 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #保留 自定义控件 集成view的 -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); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } # 保留Parcelable序列化类不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #保持 Serializable 不被混淆 -keepnames class * implements java.io.Serializable # 保留Serializable序列化的类不被混淆 -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } #保持R文件不被混淆,否则,你的反射是获取不到资源id的 -keep class **.R$* { *; } # 不混淆R类里及其所有内部static类中的所有static变量字段,$是用来分割内嵌类与其母体的标志 -keep public class **.R$*{ public static final int *; } -keepclassmembers class **.R$* { public static <fields>; } # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆 -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } # 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); } # json -keepclassmembers class * { public <init>(org.json.JSONObject); } #不混淆泛型 -keepattributes Signature #避免混淆注解类 -dontwarn android.annotation -keepattributes *Annotation* #避免混淆内部类 -keepattributes InnerClasses # ============忽略警告,否则打包可能会不成功============= -ignorewarnings ##记录生成的日志数据,gradle build时在本项目根目录输出## #apk 包内所有 class 的内部结构 -dump proguard/class_files.txt #未混淆的类和成员 -printseeds proguard/seeds.txt #列出从 apk 中删除的代码 -printusage proguard/unused.txt #混淆前后的映射 -printmapping proguard/mapping.txt # 腾讯 bugly -dontwarn com.tencent.bugly.** -keep public class com.tencent.bugly.**{*;} #支付宝 -keep classcom.alipay.android.app.IAliPay{*;} -keep classcom.alipay.android.app.IAlixPay{*;} -keep classcom.alipay.android.app.IRemoteServiceCallback{*;} -keep classcom.alipay.android.app.lib.ResourceMap{*;} #Gson -keep public class com.google.gson.**{ *; } -keep public class com.google.gson.** { public private protected *;} -keep class sun.misc.Unsafe { *; } # 如果使用了Gson之类的工具要使被它解析的JavaBean类即实体类不被混淆。 -keep class com.matrix.app.entity.json.** { *; } -keep class com.matrix.appsdk.network.model.** { *; } # 保持所有实体类 -keep class com.huolieniaokeji.breedapp.bean.** {*;} -keep class com.huolieniaokeji.breedapp.httpconfig.BaseJson {*;} # 选择器 -dontwarn com.bigkoo.pickerview.** -keep class com.bigkoo.pickerview.**{*;} -keep class android.support.**{*;} # ButterKnife -keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; } -keepclasseswithmembernames class * { @butterknife.* <fields>; } -keepclasseswithmembernames class * { @butterknife.* <methods>; } # EventBus -keepattributes *Annotation* -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # Facebook -keep class com.facebook.** {*;} -keep interface com.facebook.** {*;} -keep enum com.facebook.** {*;} #Fresco -keep class com.facebook.fresco.** {*;} -keep interface com.facebook.fresco.** {*;} -keep enum com.facebook.fresco.** {*;} # Retrofit -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions # OkHttp3 -dontwarn com.squareup.okhttp3.** -keep class com.squareup.okhttp3.** { *;} -dontwarn okio.** # 微信支付 -dontwarn com.tencent.mm.** -dontwarn com.tencent.wxop.stat.** -keep class com.tencent.mm.** {*;} -keep class com.tencent.wxop.stat.**{*;} # glide -keep public class * implements com.bumptech.glide.module.GlideModule -keep public class * extends com.bumptech.glide.module.AppGlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } # picasso -keep class com.squareup.picasso.** {*; } -dontwarn com.squareup.picasso.**