我有一个使用 Gradle 从命令行构建的 Eclipse 项目。
有一个单独的资源文件夹,其中包含应该用于发布构建的应用程序图标。
这是我正在尝试做的事情:
sourceSets {
main {
res.srcDirs = isRelease() ? ['res', 'res-release'] : ['res']
}
}
Gradle 拒绝覆盖图标:
Execution failed for task ':myapp:mergeApphanceDebugResources'.
> /myapp/res-release/drawable-xhdpi/app_icon.png: Error: Duplicate resources: /myapp/res-release/drawable-xhdpi/app_icon.png:drawable-xhdpi/app_icon, /myapp/res/drawable-xhdpi/app_icon.png:drawable-xhdpi/app_icon
有没有办法告诉 Gradle 在发生冲突时覆盖?
编辑:我想保留默认的 Eclipse 项目结构(即没有 main/java)。
最佳答案
Mark 的答案是正确的,但由于您在另一个答案中评论了 Eclipse 支持,我将创建一个新答案。
正如马克所说,使用 src/release/res
(或调试)把你的发布只有图标。它们将自动覆盖 src/main/res
中的那些
现在,如果您想继续支持 Eclipse,只需像重新定位主源集一样重新定位发布源集:
android {
sourceSets {
main {
res.srcDirs = ['res']
}
release {
res.srcDirs = ['res-release']
}
}
}
所有构建类型(默认情况下你有 debug
和 release
),以及你所有的风格(默认情况下没有风格),自动创建默认值为 src/<name>/[java|res|...]
的 sourceSets .所有这些 sourceSet 都可以通过 DSL 重新配置以重新定位文件夹。
关于android - 覆盖资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049444/