以前剛接觸Gradle的時候,對很多概念不熟悉,對Gradle的API也不熟悉,導致總有種似懂非懂的感覺,這是一種很不好現象,其實Gradle就是一個項目構建的框架,我們平時接觸最多的就是Gradle的Groovy腳本文件。後來慢慢發現,其實Gradle還有很多其他重要的作用,比如Gradle的自定義插件、Gradle中的Transfrom等等
Gradle相關的基礎知識網上一搜一大把,本文只打算講講BuildVariant這個概念,因爲以前一直對這個概念不太理解。其實BuildVariant就是由BuildType和ProductFlavor組成,這裏將它翻譯成構建體,每創建一個BuildType和ProductFlavor都會同時創建對應的構建體,而對於每個BuildVariant,Android Plugin 都會創建對應的“assembleBuildVariantName”任務
一、BuildType
默認情況下,Android Plugin會自動構建release和debug兩個版本的BuildType,當然我們也可以自定義其他的BuildType,從官網中可以查到BuildType的詳細講解:BuildType的Android Plugin官網鏈接
1.BuildType的可配置屬性如下所示,從中可以看到我們常用的屬性,比如minifyEnable、singleConfig等等
2.BuildType的可使用方法如下所示,其中proguardFile是我們常見到配置混淆文件的方法
二、ProductFlavor
ProductFlavor我們稱之爲風味配置,一個獨立的項目可以定義不同的flavor來生成不同的應用包,其中ProductFlavor和BuildType就共同構成了不同的構建體,即BuildVariant
一個簡單的例子,我想生成兩個不同分支的包,如下
productFlavors {
branchOne {
applicationId "com.example.branchOne"
buildConfigField "String", "CONFIG_ENDPOINT", "http://branchOne.com/android"
}
branchTwo {
applicationId "com.example.branchTwo"
buildConfigField "String", "CONFIG_ENDPOINT", "http://branchTwo.org"
}
}
可以看到,你可以在ProductFlavor中定義buildConfigField字段,這些字段將在BuildConfig中生成,然後在代碼中我們可以通過BuildConfig類獲取這裏定義的字段,從而實現在不同flavor的應用中得到不同的buildConfigField值,如上面的兩個不同Host地址,官網鏈接:ProductFlavor鏈接
1.ProductFlavor的可使用配置如下所示
2.ProductFlavor的可使用方法如下所示
三、總結
總之,記住這點,BuildVariant就是BuildType和ProductFlavor的結合體,這樣我們就好理解了,是平時使用的過程中,我們常常先獲取對應的BuildVariant,然後再設置或取得對應的BuildType和ProductFlavor的值,常見方式如下
//遍歷所有的構建體
android.applicationVariants.all { ApplicationVariant variant ->
//相關的操作
}