android - 覆盖资源

标签 android gradle

我有一个使用 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']
        }
    }
}

所有构建类型(默认情况下你有 debugrelease ),以及你所有的风格(默认情况下没有风格),自动创建默认值为 src/<name>/[java|res|...] 的 sourceSets .所有这些 sourceSet 都可以通过 DSL 重新配置以重新定位文件夹。

关于android - 覆盖资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049444/

相关文章:

android - 禁用 ListView 的项目 - 我的代码出现异常

flutter - 如何解析视频压缩的: Gradle task assembleDebug failed with exit code 1 error?

android - Gradle 重复输入错误

android - 切片签名与android studio默认运行不一致

gradle - 仅使用必需平台的二进制文件构建jar(javacpp)

android - 如何为预期的 ACTION_OPEN_DOCUMENT_TREE 创建内容 Uri

android - Dagger2 + Kotlin 上的 MVP

java - Dagger - 从其他类访问单例对象

android - 修复 Android 中 EditText 的值限制?

android - 共享 jenkins 库 build.gradle 错误