Android混淆總結

如何開啟混淆

eclipse

只需要在工程中找到projiect.properties文件,在這個文件中修改下面一段代碼:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

Android Studio

在對應的module中,找到build.gradle,在該文件中找到buildTypes,將minifyEnabled置成true,這里簡單介紹一下buildTypes:

release {//release對應release編譯,debug對應debug編譯

// 是否進行混淆

minifyEnabled true

// 簽名文件

signingConfig signingConfigs.debug

//對應的混淆文件

proguardFiles 'proguard-rules.pro'

}


其中簽名文件如下:

signingConfigs {

debug {

storeFile file('debug.keystore')

storePassword "xxxxx"

keyAlias "xxxx"

keyPassword "xxxx"

}

}

接著說混淆,下面介紹混淆的基本配置:

-dontusemixedcaseclassnames:不使用大小寫形式的混淆名

-dontskipnonpubliclibraryclasses:不跳過library的非public的類

-dontoptimize:不進行優化,優化可能會在某些手機上無法運行。

-dontpreverify:不凈行預校驗,該校驗是java平臺上的,對android沒啥用處

-keepattributes *Annotation*:對注解中的參數進行保留

-keep public class com.deep.test.MainActivity 對某個class不進行混淆

-dontshrink 不縮減代碼

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}//保持枚舉類中的屬性不被混淆

-keepclassmemberspublic class *extends android.view.View{

void set*(***);

*** get*();

}不混淆任何view子類的get和set方法。

-keepclassmembers class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator CREATOR;

}//保持枚舉類中的屬性不被混淆

-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 ;

}//資源類變量需要保留

具體方法介紹:

-keep關鍵字

keep:包留類和類中的成員,防止他們被混淆

keepnames:保留類和類中的成員防止被混淆,但成員如果沒有被引用將被刪除

keepclassmembers:只保留類中的成員,防止被混淆和移除。

keepclassmembernames:只保留類中的成員,但如果成員沒有被引用將被刪除。

keepclasseswithmembers:如果當前類中包含指定的方法,則保留類和類成員,否則將被混淆。

keepclasseswithmembernames:如果當前類中包含指定的方法,則保留類和類成員,如果類成員沒有被引用,則會被移除。

-dontwarn:忽視警告。

-optimizationpasses 5:代碼混淆壓縮比,在0~7之間,默認為5,一般不做修改。

-keepattributes Signature:避免混淆泛型。

-keepattributes SourceFile,LineNumberTable:拋出異常時保留代碼行號

一些符號的解釋說明

<init>構造方法

<field>所有成員

<methods>所有方法

所以所有成員不被混淆可以這么寫

-keepclasseswithmembers class com.ebt.app.common.bean.Customer {

<init>;

<field>;

<methods>;

}

? ?匹配單一的字符

* ?匹配一段字符

% ?匹配基本類型

-libraryjars libs/aaa.jar 不混淆某個jar

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容