gradle上sourceSets配置&同名文件合并问题
2018-09-12 本文已影响2371人
yuenxm
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里。