owe*_*owe 36 android android-studio build.gradle android-gradle-plugin
几个星期前,我发布了一个问题如何根据buildType覆盖资源.就在昨天,有一个用于android的gradle插件版本.根据这篇关于G +的帖子,我决定写下这个问题.
我详细描述的问题:
我想根据它创建一些资源值buildType,但这不能正常工作:只有在命令行上完成构建时才会创建文件"generated.xml":
gradlew build
Run Code Online (Sandbox Code Playgroud)
但是我通过在comannd线上构建完整的项目也会出错:
* 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
Run Code Online (Sandbox Code Playgroud)
每个其他构建试用版都不会创建此文件.我试过以下:
奇怪的gradle控制台输出:
:app:generateBuildVariantResValues UP-TO-DATE
Run Code Online (Sandbox Code Playgroud)
我的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"
}
}
Run Code Online (Sandbox Code Playgroud)
我的"generated.xml":
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from build type: release -->
<item name="RES FOO" type="String">RES FOO RELEASE</item>
Run Code Online (Sandbox Code Playgroud)
我的问题:
这是一个错误还是我错过了什么?为什么这个文件不是由RebuildIDE 创建的?
我的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"
}
}
Run Code Online (Sandbox Code Playgroud)
更新2014-02-14 IT工作:
之后的gradle这个Android插件的更新一切正常:
在/ 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>
Run Code Online (Sandbox Code Playgroud)
要获取代码中的值,只需像所有其他资源一样使用生成的资源:
getResources().getString(R.string.TESTFOO)
Run Code Online (Sandbox Code Playgroud)
rci*_*ati 63
我解决了在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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意:
string和不String编辑:从0.8.3开始,它应该可以正常工作,只需在构建类型块中声明resValue.
| 归档时间: |
|
| 查看次数: |
25421 次 |
| 最近记录: |