gpt4 book ai didi

android - 将具有完全相同配置的许多 sourceSets 中的少数分组

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:30:34 24 4
gpt4 key购买 nike

假设我有以下 sourceSets:

sourceSets {
flavor1 {
assets.srcDirs = ['repo-assets/flavor1']
res.srcDirs = ['repo-res/flavor1']
}
flavor2 {
assets.srcDirs = ['repo-assets/flavor2']
res.srcDirs = ['repo-res/flavor2']
}
flavor3 {
assets.srcDirs = ['repo-assets/flavor1']
res.srcDirs = ['repo-res/flavor1']
}
flavor4 {
assets.srcDirs = ['repo-assets/flavor2']
res.srcDirs = ['repo-res/flavor2']
}
}

如果您注意到 flavor1flavor3 具有相同的 srcDirs,那么 flavor2flavor4 也是如此。


尝试可能性#1

我试图弄清楚是否有一种方法可以通过使用类似这样的方法来避免冗余:

sourceSets {
flavor1, flavor3 {
assets.srcDirs = ['repo-assets/flavor1']
res.srcDirs = ['repo-res/flavor1']
}
flavor2, flavor4 {
assets.srcDirs = ['repo-assets/flavor2']
res.srcDirs = ['repo-res/flavor2']
}
}

以上都不行(已经试过了)。寻找类似的东西,这样我就可以为一组风格提供一组通用的 sourceDirs。任何人都尝试过做类似的事情并且可以提供一些指导吗?


尝试可能性#2

sourceSets 的名称是否需要与 flavor 的名称相同?

我可以单独命名 sourceSets,然后像这样将它们映射到 productFlavors 吗?

productFlavors {
flavor1 {
sourceset = "src1"
}
flavor2 {
sourceset = "src2"
}
flavor3 {
sourceset = "src1"
}
flavor4 {
sourceset = "src2"
}
}

sourceSets {
src1 {
}
src2 {
}
}

尝试可能性#3

源集能否通过任务以某种方式动态分配以实现相同的目标?


更新

Douglas 的回答有点帮助我非常接近我最终要寻找的东西(减少 build.gradle 中的代码)。他使用了上面的可能性#3。谢谢道格拉斯!赏金猎人的任何更好的选择仍然是受欢迎的(更接近上面的可能性#1和#2)。如果什么都没有出现,那么当我接受他的回答时,当期限结束时,赏金已经是道格拉斯的了。但仍然对找到更好的替代方案保持乐观。

最佳答案

您也非常接近您的第一种可能性:

sourceSets {
[flavor1, flavor3].each {
it.assets.srcDirs = ['repo-assets/flavor1']
it.res.srcDirs = ['repo-res/flavor1']
}
[flavor2, flavor4].each {
it.assets.srcDirs = ['repo-assets/flavor2']
it.res.srcDirs = ['repo-res/flavor2']
}
}

上面的代码在IDEA编辑器中看起来不太好,显示了很多警告。如果你想获得代码完成,你可以设置类型:

import com.android.build.gradle.api.AndroidSourceSet
android {
sourceSets {
[flavor2, flavor4].each { AndroidSourceSet ss ->
ss.assets.srcDirs = ['repo-assets/flavor2']
ss.res.srcDirs = ['repo-res/flavor2']
}
}
}

另一个技巧:通过这种方式,风格的定义与源集列表位于同一位置。

android
productFlavors {
flavor1 {
applicationId "flavor1.app.id"
}
flavor2 {
applicationId "flavor2.app.id"
}
[flavor1, flavor2].each {
sourceSets[it.name].assets.srcDirs = ['repo-assets/flavor1']
sourceSets[it.name].res.srcDirs = ['repo-assets/flavor1']
}
}

无论你走哪条路,srcDirs 也有一个值得注意的地方,see source :

println assets.srcDirs // say it's [src/flavor/assets]
assets.srcDirs = ['dir1', 'dir2'] // overwrites existing directories: output would be [dir1, dir2]
assets.srcDirs 'dir1', 'dir2' // appends existing directories: output would be [src/flavor/assets, dir1, dir2]
assets.srcDir 'dir1' // appends only one dir, output would be [src/flavor/assets, dir1]

关于android - 将具有完全相同配置的许多 sourceSets 中的少数分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com