【问题标题】:Android - Inner element must either be a resource reference or emptyAndroid - 内部元素必须是资源引用或为空
【发布时间】:2018-08-29 11:34:32
【问题描述】:

错误详情

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>

构建环境

  • Android Studio 3.1.4
  • minSdkVersion = 21
  • targetSdkVersion = 28
  • compileSdkVersion = 28
  • buildToolsVersion = "28.0.2"

【问题讨论】:

标签: android android-layout android-gradle-plugin aapt


【解决方案1】:

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

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

欲了解更多信息,请查看以下链接

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>

【讨论】:

  • 我知道这个,如果xml文件在aar文件中,那么如何解决这个问题
  • @yuchangfu 你可以覆盖文件中的资源来解决这个问题。
【解决方案2】:

升级到 Android Studio 3.2.1 后我遇到了类似的问题

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

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

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

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

这解决了问题。

【讨论】:

  • 您是如何编辑文件的?它会自动重新生成
  • 非常混乱,android studio 自动创建了这个。
【解决方案3】:

在您的资源文件中删除结束标签和正文,即删除“tv_deviceName”

让你的资源文件如下:

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

【讨论】:

  • Oliver Manyasa,您愿意分享您的电子邮件地址还是尽快发送电子邮件至 pchidzalo@must.ac.mw
【解决方案4】:

对于所有仍在摸索解决此问题的其他人,请在 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照顾它。

【讨论】:

  • 很好的解决方案!只需在您自己的资源中覆盖这些值、项目、字符串等!
  • 您能否详细说明您的答案,并给出一个示例 ids.xml 文件?我尝试了您的建议,但重建后错误中出现了相同的项目?
【解决方案5】:

对我来说,这实际上是失败的,因为新的 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>

【讨论】:

    【解决方案6】:

    我只是在res/xml/values 中创建了这个自动生成的文件,带有像

    这样的空标签
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        ...
        <item type="id" name="icon" />
        ...
    </resources>
    

    成功了!

    【讨论】:

      【解决方案7】:

      我有以下错误

      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。

      在上面的截图中你可以看到确切的文件位置。

      【讨论】:

      • 最后我的项目没有一行代码。
      • @young 没错。
      【解决方案8】:

      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 的新手,所以我刚刚注意到并且我没有意识到的是&lt;item name="roll_button" type="id" /&gt; 需要在末尾添加正斜杠,才能在结束&gt; 之前使用.如果您不包含它,那么您将收到我得到的错误,但如果您包含它,他接受的答案有效

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-11
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多