一  混淆的目的 ,避免项目被反编译。

二  混淆的步骤(本文只针对Android studio)

      1   在model目录的build.build文件中 android 节点下

         

buildTypes {
    debug {
        buildConfigField "boolean", "IS_TEST", "true"
    }
    release {
        //代码混淆
        minifyEnabled true
        //zipalign优化
        zipAlignEnabled true
        //自定义字段【true:测试地址 false:线上地址】
        buildConfigField "boolean", "IS_TEST", "false"
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

debug 代表的是没有签名的版本  release代表的是 签名的版本  所在在 release 节点下 设置 混淆开关   //代码混淆  minifyEnadbled true  (true为混淆 false为不混淆)  关联混淆文件  proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'


   2 配置混淆文件  我们设置了混淆开关 true 代表 项目被混淆 但是由于有一些内容是不能被混淆的 所以 我们需要在配置文件中声明 不能被混淆的内容


     a  通用配置:

        

#指定代码的压缩级别
-optimizationpasses 5
#混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#优化  不优化输入的类文件
-dontoptimize
#包明不混合大小写
-dontusemixedcaseclassnames
#混淆时是否记录日志
-verbose
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
#保护注解
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
#避免混淆泛型 如果混淆报错建议关掉
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes SourceFile,LineNumberTable
#忽略警告
-ignorewarning

     b  关于安卓的基本过滤

#------------------  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.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v4.app.FragmentActivity
-keep public class android.webkit.**
-keep public class javax.**

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}
#保持 native 方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}
#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
   public <init>(android.content.Context, android.util.AttributeSet);
}
#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
   public <init>(android.content.Context, android.util.AttributeSet, int);
}
#保持自定义控件类不被混淆
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
##保持 Serializable 不被混淆并且enum 类也不被混淆
#-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();
#}
#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable
 #不混淆资源类
-keepclassmembers class **.R$* {
    public static <fields>;
}
-keepclassmembers class * {
    public <init>(org.json.JSONObject);
}

     c 共性的排除项目

#------------------  下方是共性的排除项目  ----------------
# 方法名中含有“JNI”字符的,认定是Java Native Interface方法,自动排除
# 方法名中含有“JRI”字符的,认定是Java Reflection Interface方法,自动排除
-keepclasseswithmembers class * {
    ... *JNI*(...);
}
-keepclasseswithmembernames class * {
   ... *JRI*(...);
}
-keep class **JNI* {*;}



     d 避免混淆的第三方jar包

#------------------  第三方包 ----------------
#-keep class android.support.v4.** { *; }
#-keep class android.support.v7.** { *; }
#-keep class android.support.v13.** { *; }
#-keep class org.apache.commons.net.** { *; }
#-keep class android.support.design.** { *; }
#-keep class com.google.gson.** { *; }
#-keep class com.android.volley.** { *; }
#-keep class com.viewpagerindicator.** { *; }
#-keep class uk.co.senab.photoview.** { *; }
#-keep class com.github.mikephil.charting.** { *; }
#-keep class android.support.annotation.** { *; }
#-keep class com.readystatesoftware.systembartint.** { *; }
#-keep class com.google.zxing.** { *; }

 


     e  忽略警告

#忽略警告
-keep class android.support.**{*;}
-dontwarn android.support.**
-dontwarn android.webkit.WebView

    f 第三方的sdk  本文中收录的 第三方的sdk 混淆代码  如果 没有被收录的请自行百度

# 百度地图过滤
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
-dontwarn com.baidu.**

# butterknife7.0
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepnames class * { @butterknife.Bind *;}
-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

# Glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
    **[] $VALUES;
    public *;
}

# retrofit1.9.0
-dontwarn rx.**
-dontwarn com.google.appengine.api.urlfetch.**
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}
-keepattributes Signature
-keepattributes *Annotation*

# retrofit2.0
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions

# okhttp
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }

# Okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.**
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**

# universal-image-loader
-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }

# 阿里百川
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }

-keep class com.taobao.** {*;}
-keep class com.alibaba.** {*;}
-keep class com.alipay.** {*;}
-dontwarn com.taobao.**
-dontwarn com.alibaba.**
-dontwarn com.alipay.**

-keep class com.ut.** {*;}
-dontwarn com.ut.**

-keep class com.ta.** {*;}
-dontwarn com.ta.**

-keep class anet.**{*;}
-keep class org.android.spdy.**{*;}
-keep class org.android.agoo.**{*;}
-dontwarn anet.**
-dontwarn org.android.spdy.**
-dontwarn org.android.agoo.**

# ShareSDK
-keep class cn.sharesdk.**{*;}
-keep class com.sina.**{*;}
-keep class **.R$* {*;}
-keep class **.R{*;}
-dontwarn cn.sharesdk.**
-dontwarn **.R$*

# 微信支付分享
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}

# 支付宝
-keep class com.alipay.android.app.IALiPay{*;}
-keep class com.alipay.android.app.IALixPay{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}

# 百度云推送
#-libraryjars libs/pushservice-5.2.0.12.jar
-dontwarn com.baidu.**
-keep class com.baidu.**{*; }

     g 针对项目的 bean文件  R文件  和 webView  需要添加的代码

#------------------  得威电商 ----------------
-keep class com.e_dewin.dewinapp.bean.** { *; }
-keep public class com.e_dewin.dewinapp.R$*{
    public static final int *;
}
#WebView调用JS代码的类都需要加这个
-keep class com.pandaol.ui.login.LoginActivity$CommonScriptInterface {
   *;
}