Android Studio(我使用的Studio版本是2.0)中有一個構(gòu)建變體的功能,默認位于左下角

那這個功能是做什么用的呢,一般來說我們在做項目的時候,可能有這樣的需求,一個項目中需要有不同版本,比如說免費版,收費版,周年慶版啦等等,這些版本大部分功能和模塊是一樣的只是部分不同,以前可能是通過svn或者git上建立分支來進行版本控制,但維護起來很麻煩。所以構(gòu)建變體這個功能用官方的說法就是你可以在一個項目里面構(gòu)建不同的版本,對,而且打包的時候可以一次性打包所有版本,是不是超級爽。英語好的同學可以看官方的教程Configure Build Variants。
配置Product Flavors
第一步,在moudle中的build文件中配置Product Flavors
android {
defaultConfig { ... }
//...
productFlavors {
free {
applicationId "cc.abto.free"
versionCode 125
versionName "2.3.5" + ""
}
charge {
applicationId "cc.abto.charge"
versionCode 7
versionName "1.0.7" + ""
}
}
//...
}
上面的代碼中,我們創(chuàng)建了兩個版本,一個free版和一個charge版,其中defaultConfig 為默認值,productFlavors {}會復寫所有可以復寫的值。配置好之后我們就可以Sync Project一下啦,然后就可以在左下角的Build Variants工具欄上選擇版本啦。

第二步,我們還需要給每個版本創(chuàng)建對應的文件夾,點擊src文件夾右鍵

文件夾的名稱和productFlavors {}中的名稱對應。然后再在各個文件下常見相應的java和res以及AndroidManifest等文件夾或文件。當然手動創(chuàng)建這些文件夾很麻煩(我就是這么懶),我們可以通過新建一個Activity來創(chuàng)建相關(guān)的文件夾。然后在Acitvity的創(chuàng)建界面,我們選擇放置在哪一個版本。

如上圖所示,當當當,需要的文件夾就都創(chuàng)建完成了,Build Variants選擇版本和創(chuàng)建相應文件夾之后,在android目錄結(jié)構(gòu)下就只能看到這個版本的文件

然后你就可以針對這個版本做開發(fā)啦,當你要開發(fā)另一個版本時,再在Build Variants選擇相應的版本,怎么樣,是不是很贊,給了這么圖是因為這東西跟理論不同,希望能盡量的直觀點。
不同的Manifest需求
每個版本都可以有自己的清單文件,Manifest可以通過Merge的方式合并多個Manifest源。也就是說,manifest的merge會將每個元素及其子元素的節(jié)點和屬性進行合并。但是每個版本的manifest之間是不會合并的。
不同的依賴
你也可以給不同的版本使用不同的依賴,在build.gradle中,使用Flavor名+Compile來規(guī)定特定Flavor所需依賴。
dependencies {
//...
freeCompile 'com.android.support:appcompat-v7:23.3.0'
chargeCompile 'com.android.support:design:23.3.0'
}
不同ProGuard需求
當然也可以針對版本做不同的混淆要求
android {
buildTypes {
release {
minifyEnabled true
proguardFile getDefaultProguardFile('proguard-android.txt')
}
}
productFlavors {
flavor1 {
}
flavor2 {
proguardFile 'some-other-rules.txt'
}
}
}
打包
最后,我們在打包發(fā)布的時候可以在列表中選擇所有版本,gradle就會一次性打包好所有版本。
