android集合按某个字段分组,android – 对许多sourceSets中的一些进行分组,配置完全相同...

可以说我有以下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']

}

}

如果你注意到flavor1和flavor3有相同的srcDirs,那么flavor2和flavor4也是如此.

尝试可能性#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的名称相同?

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

productFlavors {

flavor1 {

sourceset = "src1"

}

flavor2 {

sourceset = "src2"

}

flavor3 {

sourceset = "src1"

}

flavor4 {

sourceset = "src2"

}

}

sourceSets {

src1 {

}

src2 {

}

}

尝试可能性#3

可以通过某种方式动态分配源集来实现相同的东西吗?

UPDATE

道格拉斯的答案有点帮助我最终得到了我正在寻找的东西(减少了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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值