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里。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 14,168评论 8 72
  • 所有Android插件的基本扩展。 你不需要直接使用这个,你可以选择下面几个合适的直接使用 AppExtensio...
    我该忘了我自己w_u阅读 8,739评论 0 5
  • 一、构建变体 1. BuildType 1.1 默认BuildType 默认情况下,Android plugin会...
    zly394阅读 14,116评论 4 30
  • 早上一进办公室,就看见外贸部的小娟哭丧着脸,一会回到座位就开始发脾气。我走过去问:“小娟,发生什么了。”小娟很大声...
    幕小闲阅读 1,878评论 0 1
  • 1、时间记录程序时间太短,过渡时间不要陷入无意识状态。 2、明日计划(1)编程(2)图片评审(3)程序测试(4)有...
    wenzi2507阅读 1,644评论 0 0