Android Studio:使用Gradle構(gòu)建不同版本的APP(構(gòu)建變體)

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就會一次性打包好所有版本。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容