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

dauxcl2d  于 2023-02-11  发布在  Android
关注(0)|答案(8)|浏览(148)
    • 错误详细信息**
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
  • 最小Sdk版本= 21
  • 目标服务器版本= 28
  • 编译Sdk版本= 28
  • 构建工具版本="28.0.2"
4zcjmb1e

4zcjmb1e1#

在资源中声明id时,主体应为空

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

欲了解更多信息,请看看下面的链接
https://developer.android.com/guide/topics/resources/more-resources#Id
奥利弗Manyasa所述,应如下所示

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

xcitsw882#

我在升级到Android Studio 3.2.1后遇到了类似的问题
指向ids.xml文件中的此项时出错

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

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

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

这就解决了问题。

rt4zxlrg

rt4zxlrg3#

对于那些还在绞尽脑汁寻找解决方案的人来说,可以在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会处理该问题。

amrnrhlw

amrnrhlw4#

在您的资源文件上删除结束标记和正文,即删除“tv_deviceName”
让你的资源文件像这样:

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

qc6wkl3g5#

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

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

构建. 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>
7fhtutme

7fhtutme6#

我只是在res/xml/values中创建了这个自动生成的文件,其中包含如下空标记

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

这招管用!

blpfk2vs

blpfk2vs7#

我有以下错误

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。

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

5us2dqdw

5us2dqdw8#

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" />需要在结尾处的正斜杠在结束>之前。如果你不包括它,那么你会得到我得到的错误,但如果你包括它,t他接受的答案工作

相关问题