proguard混淆
一般release發(fā)布版本是需要啟用混淆的账阻,這樣別人反編譯之后就很難分析你的代碼蒂秘,而我們自己開發(fā)調(diào)試的時(shí)候是不需要混淆的,所以debug不啟用混淆淘太。對(duì)release啟用混淆的配置如下:
android {
? ? buildTypes {
? ? ? ? release {
? ? ? ? ? ? minifyEnabled true//是否啟動(dòng)混淆
? ? ? ? ? ? proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
? ? ? ? }
? }
}
多版本姻僧,多渠道編譯
構(gòu)建變量= 構(gòu)建類型 + product flavor
其中 構(gòu)建類型一般是 debug與 release, 也可自定義構(gòu)建類型
Product flavor有產(chǎn)品的味道的意思。
可為每個(gè) product flavor 單獨(dú)配置資源文件 layout 與 drawable.如果與main有沖突編譯優(yōu)先會(huì)取flavor.?? value會(huì)與 main合并蒲牧。 也可為 每個(gè) falvor 單獨(dú)創(chuàng)建目錄java文件撇贺,在flavor下單獨(dú)存在,各個(gè)flavor互不沖突造成,但不可與main有沖突显熏,否則編譯不過雄嚣。
資源優(yōu)先級(jí)(覆蓋原則:從左到右 優(yōu)先級(jí)逐步降低):
Buildtype -------->product falvor ------->main---->庫(kù)中的資源
可在每個(gè) product flavor中 自定義
versionCode
versionName
會(huì)覆蓋 默認(rèn)defaultConfig中的 versionCode與versionName
另外晒屎,可以在product flavor中 自定義資源變量喘蟆,根據(jù)構(gòu)建變量,編譯出apk后鼓鲁,運(yùn)行后就可以取出該資源變量的值蕴轨。根據(jù)該變量值,華數(shù)apk 做出相應(yīng)的UI調(diào)整骇吭,以及業(yè)務(wù)規(guī)則修改橙弱。 product flavor的buildConfigField屬性也可以解決該問題,編譯出apk后燥狰,可以獲得靜態(tài)變量 BuildConfig.channel的值
聲明如下:
buildConfigField "String", "channel", name
例子如下:
flavorDimensions("channel", "region")
productFlavors {
//渠道名
? ? ? ? hangzhou { dimension "region"
? ? ? ? ? ? resValue("string", "region", "China")}
? ? ? ? zhejiang { dimension "region"
? ? ? ? ? ? resValue("string", "region", "chongqing")}
//版本名
? ? ? ? tcl {
? ? ? ? ? ? dimension "channel"
? ? ? ? ? ? versionCode 1234
? ? ? ? ? ? versionName "AAA-1234"
? ? ? ? ? ? resValue("string", "versionType", "TCL")
? ? ? ? }?
對(duì)于jar包多版本區(qū)別打包棘脐,實(shí)例如下:
tclCompile files('libs/***.jar')
chuangweiHCompile files('libs/***.jar')
chuangweiLCompile files('libs/***.jar')
changhongCompile files('libs/***.jar')
buildTypes
buildTypes {
? release {
? ? ????debuggable true? ? minifyEnabled true //啟用Proguard? ??
????????shrinkResources true //是否清理無用資源,依賴于minifyEnabled? ??
????????zipAlignEnabled true //是否啟用zipAlign壓縮? ??
????????signingConfig signingConfigs.release
? ? ????proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'? }
? debug {
? ? ????debuggable true? ??
????????minifyEnabled false? //不啟用Proguard? ??
????????shrinkResources false //是否清理無用資源,依賴于minifyEnabled? ??
????????zipAlignEnabled false //是否啟用zipAlign壓縮? ??
????????signingConfig signingConfigs.debug
? }
}
注意:
? 1 .minifyEnabled 會(huì)對(duì)代碼進(jìn)行混淆和壓縮,shrinkResources 會(huì)對(duì)比R文件對(duì)無用資源進(jìn)行刪除
? 2.minifyEnabled 設(shè)置為true時(shí)shrinkResources 的設(shè)置才會(huì)生效