build.gradle中buildTypes和productFlavors詳解

用過(guò)AS的程序猿都知道build.gradle文件的作用,但我仍堅(jiān)信還是有很多猿友不知道build.gradle文件中的一些代碼的意思到底是什么?
這里來(lái)說(shuō)下buildTypes和productFlavors的作用,順便會(huì)說(shuō)下其他一些配置。
首先,我們剛創(chuàng)建android 項(xiàng)目的時(shí)候as會(huì)自動(dòng)幫我們創(chuàng)建build.gradle文件,注意build.gradle文件會(huì)創(chuàng)建兩個(gè),一個(gè)是屬于項(xiàng)目的,還有一個(gè)是屬于module的。這里說(shuō)的module中的build.gradle文件中的一些配置。默認(rèn)創(chuàng)建的build.gradle文件中的代碼如圖:


當(dāng)然了,還會(huì)有一些dependencies



這里,我們看到文件中已經(jīng)創(chuàng)建了buildTypes了,里面包含了一些release的配置,即我們發(fā)布apk的配置(主要是混淆文件)。同時(shí)as默認(rèn)幫我們創(chuàng)建了一個(gè)debug的版本的配置,使用默認(rèn)的簽名證書,通過(guò)Build Variant就可以看到。



buildTypes主要就是配置發(fā)布版本和測(cè)試版本的一些配置以及混淆文件等,現(xiàn)在主要來(lái)說(shuō)下productFlavors的配置,這個(gè)字段在創(chuàng)建項(xiàng)目的時(shí)候默認(rèn)是不會(huì)添加的,需要自己手動(dòng)添加。百度一搜,會(huì)有很多類似博客



這里主要說(shuō)的是博主自己的理解以及使用方法。


1 productFlavors主要是用來(lái)做多渠道打包等操作會(huì)用到


2 如果你的應(yīng)用會(huì)使用到不同的API_URL,不同的版本號(hào),相同的代碼需要生成不同的apk文件等等,都可以在productFlavors上做文章


第一點(diǎn),我就不多說(shuō)了,相信很多猿友都有各種方法來(lái)進(jìn)行多渠道打包了,比如友盟、美團(tuán)等,現(xiàn)在來(lái)說(shuō)第二點(diǎn),相信很多猿友都有這種感覺(jué)——一個(gè)應(yīng)用需要有很多個(gè)版本進(jìn)行使用,比如說(shuō)debug版本,測(cè)試版本,還有發(fā)布版本,并且各個(gè)版本使用的接口地址還不一樣,這種情況就需要每次去修改接口地址并重新打包測(cè)試,至少我剛開(kāi)始也是這樣的,0..0。


這里使用productFlavors來(lái)進(jìn)行配置就會(huì)簡(jiǎn)單很多了,比如你的兩個(gè)版本需要使用不同的接口地址,不同的常量,不同的appName,不同的logo,不同的包名都可以進(jìn)行配置,如下:



這里的prodcutFlavors的寫在andoid目錄下的,請(qǐng)注意。我這里分了兩個(gè)版本一個(gè)為local,一個(gè)是us(隨便命名的),可以看到使用了不同的接口地址,不同的包名等等,當(dāng)然了這里需要在你的module的src目錄下分別創(chuàng)建你新建的兩個(gè)版本命名的文件夾,



同時(shí)在文件夾中創(chuàng)建java文件夾和res文件夾,res文件夾主要就是用來(lái)替換應(yīng)用的logo的,替換logo需要進(jìn)行如下配置:


sourceSets {

main {
    manifest.srcFile 'src/main/AndroidManifest.xml'
    java.srcDirs = ['src/main/java']
    resources.srcDirs = ['src/main/java']
    aidl.srcDirs = ['src/main/java']
    renderscript.srcDirs = ['src/main/java']
    res.srcDirs = ['src/main/res']
    assets.srcDirs = ['src/main/assets']
    jniLibs.srcDirs = ['libs']
}

local.java.srcDirs = ['src/local/java']
local.res.srcDirs = ['src/local/res']
us.java.srcDirs = ['src/us/java']
us.res.srcDirs = ['src/us/res']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

}
這里表示local和us版本下的文件會(huì)優(yōu)先使用,最后打包的時(shí)候會(huì)跟main文件下的資源文件一起打包的,這時(shí)你通過(guò)Build Variants切換不同的版本安裝,會(huì)出現(xiàn)不同的logo,并且應(yīng)用不會(huì)沖突。 至于配置中的API_URL可以通過(guò)BuildConfig進(jìn)行訪問(wèn)。
最后,打包會(huì)生成四個(gè)版本的apk文件——localdebug.apk、localrelease.apk、usdebug.apk、usrelease.apk,然后根據(jù)不同的環(huán)境使用不同的apk文件。這篇博客分享就到這里,謝謝!?。?
本文屬個(gè)人總結(jié)博客,如有錯(cuò)誤,請(qǐng)指出,萬(wàn)分感謝?。?!

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

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

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