覆盖资源

时间:2014-01-10 16:27:36

标签: android gradle

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

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)。

3 个答案:

答案 0 :(得分:5)

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

正如Mark所说,使用src/release/res(或调试)来放置仅发布的图标。他们会自动覆盖src/main/res

中的内容

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

android {
    sourceSets {
        main {
            res.srcDirs = ['res']
        }
        release {
            res.srcDirs = ['res-release']
        }
    }
}

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

答案 1 :(得分:4)

步骤1:将生产图标放在src/main/res/drawable-XXXX/icon.png中,以获取XXXX的所有必要值,并替换为icon.png所需的内容。

步骤2:将调试图标放在src/debug/res/drawable-XXXX/icon.png中,以获取XXXX的所有必要值,并使用与步骤#1相同的名称。

步骤3:没有第3步。您的debug源集的图标版本应该在构建时替换main源集的图标版本。

答案 2 :(得分:2)

从评论中您只想拥有不同的图标。正如马克所说,很容易实现口味。我叫他们developproduction口味。

所以build.gradle

...
android {
    productFlavours {
        develop {
            debuggable true
            packageSuffix ".dev"
        }

        production {
            debuggable false
        }
    }
}
...

项目结构:

src
-main
 -java
 -res
  -icon.png
-production
 -res
  -icon.png

相应地构建apks:

.gradlew assembleDevelop
.gradlew assembleProduction