我有一个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)。
答案 0 :(得分:5)
Mark的答案是正确的,但是由于你在另一个答案中评论了Eclipse支持,我将创建一个新答案。
正如Mark所说,使用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。所有这些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)
从评论中您只想拥有不同的图标。正如马克所说,很容易实现口味。我叫他们develop
和production
口味。
所以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