【发布时间】:2015-10-09 16:49:40
【问题描述】:
我想基于不同的productFlavors 构建我的应用的不同版本,但需要一定程度的灵活性,而我目前还无法实现。
这是我的文件夹结构:
+src
+main
+java
+res
+base
+java
+res
+custom1
+java
+res
+custom2
+res
通用代码位于 main(服务)上,而基本 ui 位于 base(活动)上。然后在 custom1 (新活动)上定义了一个定义新 ui 的应用程序的自定义版本。这运行良好。但我需要另一个版本的应用程序 (custom2),它使用 base ui,但更改了一些 res(图标、字符串或颜色)。
我在 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 上都定义了,但我的目标是用base 覆盖资源的定义custom2 的那些。
我知道 app_name 将在 main 中被覆盖,如果我没有在 res.srcDirs 中为 custom2 指定任何内容,那么所有来自 的资源>base 将不可用。
方法正确吗?还是我滥用了 Gradle 提供的灵活性?还是有办法做我想做的事?
提前致谢!
【问题讨论】:
标签: android android-studio gradle build.gradle android-productflavors