我想基于不同的productFlavors构建我的应用程序的不同版本,但我需要一些灵活性,目前还无法实现。
这是我的文件夹结构:
+src
+main
+java
+res
+base
+java
+res
+custom1
+java
+res
+custom2
+res
通用代码位于 main(一个服务)上,基本 UI 位于 base(一个活动)上。然后定义了一个新的 UI 于自定义版本的应用程序中,该版本位于 custom1 中(新活动)。目前这个运行得很好。但是我需要另一个版本的应用程序(custom2),它使用 base UI,但更改了一些资源(图标、字符串或颜色)。
我在 build.gradle 文件中尝试的方法是:
android{
...
productFlavors {
base {
...
}
custom1 {
...
}
custom2 {
...
}
}
sourceSets{
custom2{
java.srcDirs = ['src/base/java']
res.srcDirs = ['src/custom2/res', 'src/base/res']
}
}
}
为了指定custom2
将使用base
的源代码和资源以及custom2
自己的资源。
问题是我得到了一个:
Error: Duplicate resources: <project_path>/src/base/res/values-es/strings.xml:string-en/app_name, <project_path>/src/custom2/res/values-es/strings.xml:string-en/app_name
因为app_name
在base和custom2上都有定义,但我的目标是用custom2中的资源覆盖base中的资源定义。我知道如果我在
res.srcDirs
中不指定任何内容来代替custom2,app_name
将在main中被覆盖,但同时base中的所有资源都将无法使用。这种方法正确吗?或者我正在滥用Gradle所提供的灵活性?或者有一种方法可以实现我想要做的事情吗?
提前感谢!