gradle的sourceSets可以對不同的buildType, productFlavor,buildVariant設(shè)置不同的文件路徑痘绎,進(jìn)行多樣化處理典鸡。
sourceSets{
main{
manifest.srcFile 'src/main/AndroidManifest.xml'
}
kaikai{
manifest.srcFile 'src/kaikai/AndroidManifest.xml'
}
}
一個工程項目里多個module或者多個buildType,productFlavor情況下杭攻,最后打包成一個apk,相關(guān)文件如何挑選打包進(jìn)apk呢望薄?
-
如果配置的文件目錄是針對資源文件倒彰,即:AndroidManifest和values目錄下的文件审洞,則相當(dāng)于是一個額外的配置。打包的時候是會進(jìn)行資源文件上的合并。
- 當(dāng)打包對應(yīng)的buildType/productFlavor/buildVariant的apk包時候芒澜,資源文件合并是sourceSets/main下的資源+sourcesSets/{其他配置}仰剿。當(dāng)資源名在上述資源集里唯一存在時,直接打包進(jìn)apk痴晦,當(dāng)有多個相同資源名的存在南吮,按照一定的優(yōu)先級選取資源名對應(yīng)的值打包進(jìn)去。這篇文很詳細(xì)的介紹了Manifest和資源的合并誊酌。
對資源會進(jìn)行合并部凑,有三種資源會進(jìn)行合并:
1.主資源集(src/main/)
2.構(gòu)建變體(buildType、productFlavor碧浊、buildVariant)
3.三方依賴(aar)
當(dāng)上述資源名在上述資源集里唯一存在時涂邀,直接打包進(jìn)apk,當(dāng)有多個相同的資源名存在箱锐,按照如下優(yōu)先級選取值:
build variant > build type > product flavor > main source set > library dependencies
(即:如果資源名test_string在多個strings.xml都有配置比勉,按照上面優(yōu)先級先找到的那個值被打包進(jìn)去)
- 當(dāng)打包的是buildType/productFlavor/buildVariant在sourceSets下無特定配置的包時候,只取sourceSets/main下的資源文件瑞躺。
- 如果sourceSets配置的文件是針對源碼文件敷搪,assets目錄下的文件,layout布局文件幢哨,則不會是合并赡勘,而是根據(jù)上面提到的優(yōu)先級挑選一個打包到apk里。