android studio合并资源集

时间:2018-08-29 13:23:35

标签: android android-studio gradle android-resources

我有一个具有多种风味的项目。所有资源都在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,因此除了标准的调试/发行版之外,每种风味都不需要多个构建变体。

1 个答案:

答案 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

希望这会有所帮助