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

时间:2018-08-29 11:34:33

标签: android android-layout android-gradle aapt

错误详细信息

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”

8 个答案:

答案 0 :(得分:62)

在资源中声明id时,正文应为空

<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>

答案 1 :(得分:12)

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

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

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

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

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

解决了这个问题。

答案 2 :(得分:10)

对于仍在努力解决问题的所有其他人,请在ids.xml内创建src/main/res/values,其内容类似于以下内容(但请确保使用您的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照顾它。

答案 3 :(得分:5)

在资源文件上,删除结束标记和正文,即删除“ tv_deviceName”

,然后让您的资源文件如下:

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

答案 4 :(得分:2)

我只是在res/xml/values中使用空标签(例如

)创建了此自动生成的文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <item type="id" name="icon" />
    ...
</resources>

做到了!

答案 5 :(得分:1)

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

我遇到了以下错误

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。

enter image description here

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

答案 7 :(得分:0)

values文件夹中,我双击了ids.xml文件,这是引起问题的原因

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

enter image description here

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

<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" />并没有意识到>最后需要正斜杠去结束{ {1}}。如果您不包括它,那么您将得到我得到的错误,但是如果您包括了它,则他接受的答案有效