gradle的sourceSets可以對不同的buildType, productFlavor,buildVariant設置不同的文件路徑,進行多樣化處理。
sourceSets{
main{
manifest.srcFile 'src/main/AndroidManifest.xml' } kaikai{ manifest.srcFile 'src/kaikai/AndroidManifest.xml' } }
一個工程項目里多個module或者多個buildType,productFlavor情況下,最后打包成一個apk,相關文件如何挑選打包進apk呢?
-
如果配置的文件目錄是針對資源文件,即:AndroidManifest和values目錄下的文件,則相當於是一個額外的配置。打包的時候是會進行資源文件上的合並。
- 當打包對應的buildType/productFlavor/buildVariant的apk包時候,資源文件合並是sourceSets/main下的資源+sourcesSets/{其他配置}。當資源名在上述資源集里唯一存在時,直接打包進apk,當有多個相同資源名的存在,按照一定的優先級選取資源名對應的值打包進去。這篇文很詳細的介紹了Manifest和資源的合並。
對資源會進行合並,有三種資源會進行合並:
1.主資源集(src/main/)
2.構建變體(buildType、productFlavor、buildVariant)
3.三方依賴(aar)
當上述資源名在上述資源集里唯一存在時,直接打包進apk,當有多個相同的資源名存在,按照如下優先級選取值:
build variant > build type > product flavor > main source set > library dependencies
(即:如果資源名test_string在多個strings.xml都有配置,按照上面優先級先找到的那個值被打包進去)
- 當打包的是buildType/productFlavor/buildVariant在sourceSets下無特定配置的包時候,只取sourceSets/main下的資源文件。
- 如果sourceSets配置的文件是針對源碼文件,assets目錄下的文件,layout布局文件,則不會是合並,而是根據上面提到的優先級挑選一個打包到apk里。
作者:yuenxm
鏈接:https://www.jianshu.com/p/2e07298e838f
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。