几周前,我发布了一个问题How to override resources depending on buildType。 就在昨天,有一个gradle plugin release for android。 根据{{3}},我决定写下这个问题。
我已详细描述的问题:
我想根据buildType
创建一些资源值,但这不能正常工作:
仅当我通过命令行进行完整构建时,才会创建文件“generated.xml”:
gradlew build
但是我通过在comannd line上构建完整的项目也会出错:
* What went wrong: Execution failed for task ':app:merge<buildVariant>Resources'.
Unsupported type 'String' in file C:\Users\...\build\res\generated\release\values\generated.xml
其他每个构建试用版都不会创建此文件。我试过以下:
奇怪的gradle控制台输出:
:app:generateBuildVariantResValues UP-TO-DATE
我的build.gradle:
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "String", "RES FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "String", "RES FOO", "RES FOO RELEASE"
}
}
我的“generated.xml”:
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from build type: release -->
<item name="RES FOO" type="String">RES FOO RELEASE</item>
我的问题:
这是一个错误还是我错过了什么?为什么这个文件不是由Rebuild
通过IDE创建的?
我的build.gradle(更新2014-02-10基于rciovatis回答):
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
resValue "string", "RES_FOO", "RES FOO"
}
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "string", "RES_FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
}
更新2014-02-14 IT工作:
在this post on G+之后一切正常:
在/ build / res / all /中,您应该看到以下文件夹:
resValue
找到生成的资源值)第一个文件夹all
包含所有合并资源。在方向all/<buildVariant>/values/values.xml
中,您应该找到生成的资源,在我的情况下:
// for buildType DEBUG
<item name="TESTFOO" type="string">TEST FOO DEBUG</item>
// for buildType RELEASE
<item name="TESTFOO" type="string">TEST FOO RELEASE</item>
要获取代码中的值,只需像所有其他资源一样使用生成的资源:
getResources().getString(R.string.TESTFOO)
答案 0 :(得分:61)
我解决了在defaultConfig
块中添加资源的问题。对你来说就像是:
android {
defaultConfig {
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "string", "RES_FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
}
}
请注意:
string
而不是String
编辑: 从0.8.3开始,它应该可以正常工作,只需在构建类型块中声明resValue。