只須要在工程中找到projiect.properties文件,在這個文件中修改下面一段代碼:javascript
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt複製代碼
在對應的module中,找到build.gradle,在該文件中找到buildTypes,將minifyEnabled置成true,(有對gradle不熟悉的同窗,能夠參考這篇文章Android工程gradle詳解):java
release {//release對應release編譯,debug對應debug編譯
// 是否進行混淆
minifyEnabled true
// 簽名文件
signingConfig signingConfigs.debug
//對應的混淆文件
proguardFiles 'proguard-rules.pro'
}複製代碼
Proguard是Android經常使用的免費的混淆工具,若是想了解混淆,須要先對Proguard進行了解android
Proguard主要提供了以下四種功能:json
-dontusemixedcaseclassnames//不使用大小寫形式的混淆名
-dontskipnonpubliclibraryclasses//不跳過library的非public的類
-dontoptimize//不進行優化,優化可能會在某些手機上沒法運行。
-dontpreverify//不淨行預校驗,該校驗是java平臺上的,對android沒啥用處
-keepattributes *Annotation*//對註解中的參數進行保留
-keep public class com.deep.test.MainActivity //對某個class不進行混淆 -dontshrink //不縮減代碼,須要注意,反射調用的代碼會被認爲是無用代碼而刪掉,因此要提早keep出來 -keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}//保持枚舉類中的屬性不被混淆
-keepclassmemberspublic class xxx extends xxx{
void set*(***);
*** get*();
}不混淆任何view子類的get和set方法。
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}//aidl文件不能去混淆
-keep public class com.ebt.app.common.bean.Customer //保留某個類名不被混淆 -keep public class com.ebt.app.common.bean.Customer { *;}
//保留類及其全部成員不被混淆
-keep public class com.ebt.app.common.bean.Customer {
static final;
private void get*();
}//只保留類名及其部分紅員不被混淆
-keep class com.ebt.app.sync.** { *;}
//保留包路徑下全部的類及其屬性和方法
-keepclassmembers class **.R$* {
public static ;
}//資源類變量須要保留複製代碼
下面會對上面提到過的關鍵字進行介紹:android-studio
構造方法 app
全部成員
全部方法
因此全部成員不被混淆能夠這麼寫框架
-keepclasseswithmembers class com.ebt.app.common.bean.Customer {
<init>;
<field>;
<methods>;
}複製代碼
你還能夠在
-keepclasseswithmembers class com.ebt.app.common.bean.Customer {
public <init>;
public <field>;
public <methods>;
}複製代碼
還能夠再加一些限制(以JSONObject類型做爲參數的構造方法不進行混淆):工具
-keepclasseswithmembers class com.ebt.app.common.bean.Customer {
public <init>(org.json.JSONObject);
}複製代碼
防止jni的方法被混淆gradle
-keepclasseswithmembernames class * { # 保持native方法不被混淆
native <methods>;
}複製代碼
? 匹配單一的字符
*匹配一段字符
%匹配基本類型
-libraryjars libs/aaa.jar 不混淆某個jar
##注意事項
-keep class * implements Android.os.Parcelable { // 保持Parcelable不被混淆
public static final Android.os.Parcelable$Creator *;
}複製代碼
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}複製代碼