gradle上sourceSets配置&同名文件合並問題


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呢?

  1. 如果配置的文件目錄是針對資源文件,即: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下的資源文件。
  1. 如果sourceSets配置的文件是針對源碼文件,assets目錄下的文件,layout布局文件,則不會是合並,而是根據上面提到的優先級挑選一個打包到apk里。


作者:yuenxm
鏈接:https://www.jianshu.com/p/2e07298e838f
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM