android studio合并资源集

问题描述 投票:1回答:1

我有一个有多种口味的项目。所有资源都在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添加多个构建变体。

android android-studio gradle android-resources
1个回答
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

希望这可以帮助

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.