我有一个具有多种风味的项目。所有资源都在src / main中定义,而某些资源在/ src / [flavour_name]中被覆盖。这一直很好。
但是,我现在需要自定义风味,以便它们属于两个(或将来,更多)不同客户组之一。我需要以这种方式合并资源(其中->表示“被……覆盖”):
主要来源集->客户组->风味
我尝试像这样在build.gradle中使用sourceSets:
sourceSets
{
NiceFlav.res.srcDirs = ['src/main/res', 'src/CLIENT_GROUP_1/res', 'src/NiceFlav/res']
}
希望CLIENT_GROUP_1中的资源将覆盖main中存在的资源,最后,NiceFlav中可能存在或不存在的任何资源都将覆盖main或CLIENT_GROUP_1中的任何资源。但是不幸的是,在构建时,gradle只会抛出有关CLIENT_GROUP_1和/或NiceFlav中重复的任何资源的错误。
如何配置gradle以便按所需方式合并资源?
(编辑) 至少在默认的建议配置中使用尺寸无效。如果创建多个维度,最终将得到如下目录结构:
src/Main
src/NiceFlavor
src/NiceFlavorCLIENT_GROUP_1
src/NiceFlavorCLIENT_GROUP_2
src/OtherFlavor
src/OtherFlavorCLIENT_GROUP_1
src/OtherFlavorCLIENT_GROUP_2
...
我需要将CLIENT_GROUP_1和CLIENT_GROUP_2的所有资源放在每个变体文件夹中
我真正需要的是一个目录结构,如下所示:
src/Main
src/CLIENT_GROUP_1
src/CILENT_GROUP_2
src/NiceFlavor
src/OtherFlavor
...
然后,构建需要从Main中获取所有资源,覆盖在CLIENT_GROUP_1或CLIENT_GROUP_2中找到的所有资源(取决于该风味所属的组),然后最终覆盖在单个风味目录中找到的所有资源。
旁注,一种风味将永远只属于一个CLIENT_GROUP,因此除了标准的调试/发行版之外,每种风味都不需要多个构建变体。
答案 0 :(得分:0)
我认为,您可以使用dimensions
这是有关该主题的文章: https://proandroiddev.com/advanced-android-flavors-part-2-enter-flavor-dimensions-4ad7f486f6
例如:
client1Dev
client1Staging
client1Production
client2Dev
client2Staging
client2Production
在开发者网站上有较长的介绍:https://developer.android.com/studio/build/build-variants
希望这会有所帮助