覆盖资源

yan*_*nko 2 android gradle

我有一个Eclipse项目,它使用Gradle从命令行构建.
有一个单独的资源文件夹,其中包含应该用于发布版本的应用程序图标.
这是我正在尝试做的事情:

sourceSets {
    main {
        res.srcDirs = isRelease() ? ['res', 'res-release'] : ['res']
    }
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉Gradle覆盖冲突?

编辑:我想保留默认的Eclipse项目结构(即没有main/java).

Xav*_*het 5

Mark的答案是正确的,但是由于你在另一个答案中评论了Eclipse支持,我将创建一个新的答案.

正如Mark所说,使用src/release/res(或调试)只发布你的发布图标.他们会自动覆盖其中的那些src/main/res

现在,如果您想继续支持Eclipse,只需重新定位发布源集,就像重新定位主源集一样:

android {
    sourceSets {
        main {
            res.srcDirs = ['res']
        }
        release {
            res.srcDirs = ['res-release']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所有生成类型(默认情况下你必须debugrelease),以及所有你的口味(默认为无香精),自动创建的默认值sourceSets src/<name>/[java|res|...].所有这些sourceSets都可以通过DSL重新配置以重新定位文件夹.