gpt4 book ai didi

android - resValue 梯度错误 : Unsupported type "String" in "generated.xml"

转载 作者:IT老高 更新时间:2023-10-28 21:34:39 25 4
gpt4 key购买 nike

几周前我发布了一个问题 How to override resources depending on buildType .就在昨天有一个gradle plugin release for android .基于 this post on G+我决定写这个问题。

我已经详细描述的问题:

我想根据 buildType 创建一些资源值,但这不能正常工作:只有在我通过命令行进行完整构建时才会创建文件“generated.xml”:

gradlew build

但是通过命令行构建完整的项目我也得到了一个错误:

* 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

所有其他构建试用版都不会创建此文件。我尝试了以下操作:

  • 通过 IDE:
    • 重建项目
    • 执行外部任务“assembleBuildVariant”
  • 通过命令行:
    • gradlew assembleBuildVariant

奇怪的 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"
}
}

我的“生成的.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 年 2 月 14 日更新它的工作原理:

an update of the gradle android plugin 之后一切正常:

在/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)

最佳答案

我解决了在 defaultConfig block 中添加资源的问题。对你来说,它会是这样的:

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 开始,只需在构建类型 block 中声明 resValue 即可正常工作。

关于android - resValue 梯度错误 : Unsupported type "String" in "generated.xml",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21600160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com