Android Gradle學習系列(一)構建體BuildVariant

以前剛接觸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 ->

              //相關的操作
            }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章