我有一个有多种口味的项目。所有资源都在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中找到的任何资源(取决于flavor所属的组),然后最终覆盖在单个flavor目录中找到的所有资源。
另外,一个flavor只会属于一个CLIENT_GROUP,因此除了标准的调试/发布之外,不需要为每个flavor添加多个构建变体。
我想,你可以用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
希望这可以帮助