Android - 内部元素必须是资源引用或为空

Android - Inner element must either be a resource reference or empty

错误详情

AGPBI: {"kind":"error","text":"error: \u003citem\u003e inner element must either be a resource reference or empty.","sources":[{"file":"...\app\src\main\res\values\ids.xml","position":{"startLine":2,"startColumn":4,"startOffset":57,"endColumn":61,"endOffset":114}}],"original":"","tool":"AAPT"}
:app:mergeDebugResources
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
:app:mergeDebugResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details.

资源文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id">tv_deviceName</item>
</resources>

构建环境

在资源中声明id时,body应该为空

<item
    type="id"
    name="id_name" />

更多信息请看下面link

https://developer.android.com/guide/topics/resources/more-resources#Id

所以正如Oliver Manyasa提到的,应该如下

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id"/>
</resources>

在您的资源文件中删除结束标记和正文,即删除 "tv_deviceName"

让你的资源文件像这样:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id"/>
</resources>

我在升级到 Android Studio 3.2.1

后遇到了类似的问题

错误指向 ids.xml 文件中的此项

<item name="mnuActivate" type="id">Activation</item>

正如用户Sangeet Suresh所说,我将其更改为

<item name="mnuActivate" type="id" />

这解决了问题。

致所有仍在绞尽脑汁寻找解决方案的人,在 src/main/res/values 中创建 ids.xml,内容类似于以下内容(但请确保使用您的 ID 对其进行更新'看到错误:

<?xml version="1.0" ?>
<items>
    <item name="animator" type="id"/>
    <item name="date_picker_day" type="id"/>
    <string name="deleted_key"/>
</items>

现在 Android Studio 将针对显式值给您一个错误,如果这些值来自您正在使用的某个库,那么您将无法在中间文件中进行更改,因此请在此处更改并合并您的代码时 Android studio 会处理它。

我有以下错误

error: <item> inner element must either be a resource reference or empty.

在我的例子中,我创建了新的测试项目并从 activity_main.xml 文件中删除了工具栏和 fab,但这些也在 ids.xml 文件中。从 ids.xml 文件中删除两个 ID 后,我能够 运行。在您的 ids.xml 文件中,您可能有很多 ID,但是当我创建一个新项目时,它没有 ID。

在上面的屏幕截图中,您可以看到确切的文件位置。

对我来说,这实际上是失败的,因为新的 gradle 版本。我很确定我使用的一些插件与最新的 gradle 不兼容。我最终成功构建了以下版本:

gradle-wrapper.properties 文件:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

build.gradle 文件

 dependencies {
   classpath 'com.android.tools.build:gradle:3.0.1'
 }

编辑:

因为我们现在想使用 3.2.+ 版本,所以这不是一个可靠的解决方案。

我最后做的是创建一个新的 ids.xml 文件,并覆盖所有冲突的值。

ids.xml 文件示例:

<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item name="cc_card" type="id"/>
        <item name="cc_ccv" type="id"/>
        <item name="cc_entry" type="id"/>
        <item name="cc_entry_internal" type="id"/>
        <item name="cc_exp" type="id"/>
        <item name="cc_form_layout" type="id"/>
        <item name="cc_four_digits" type="id"/>
        <item name="cc_zip" type="id"/>
        <item name="text_helper" type="id"/>
    </resources>

values 文件夹中,我双击 ids.xml 文件,这是导致问题的原因

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="roll_button" type="id">rollButton</item>
</resources>

我尝试了一些已投票的答案:

<item name="roll_button" type="id">

但我收到一条错误消息:

The element type "item" must be terminated by the matching end-tag "</item>".

为了解决这个问题,我刚刚添加了匹配的结束标记:

<item name="roll_button" type="id"></item>

更新

我是 Kotlin 的新手,所以我刚刚注意到但没有意识到的是 <item name="roll_button" type="id" /> 需要 正斜杠 end to go 才收盘>。如果你不包含它那么你会得到我得到的错误但是如果你包含它 t他接受的答案有效.

我只是在 res/xml/values 中用

等空标签创建了这个自动生成的文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <item type="id" name="icon" />
    ...
</resources>

成功了!