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>
构建环境
- Android Studio 3.1.4
- minSdkVersion = 21
- targetSdkVersion = 28
- compileSdkVersion = 28
- buildToolsVersion = "28.0.2"
在资源中声明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>
成功了!
错误详情
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"
在资源中声明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>
成功了!