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

you*_*ung 39 android android-layout aapt android-gradle-plugin

错误详情

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.
Run Code Online (Sandbox Code Playgroud)

资源文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id">tv_deviceName</item>
</resources>
Run Code Online (Sandbox Code Playgroud)

建立环境

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

San*_*esh 74

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

<item
    type="id"
    name="id_name" />
Run Code Online (Sandbox Code Playgroud)

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

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>
Run Code Online (Sandbox Code Playgroud)


小智 14

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

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

<item name="mnuActivate" type="id">Activation</item>
Run Code Online (Sandbox Code Playgroud)

正如用户Sangeet Suresh所说,我把它改成了

<item name="mnuActivate" type="id" />
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.

  • 你是怎么编辑这个文件的?它会自动重新生成 (5认同)

San*_*dey 10

对于仍在为此寻求解决方案的所有其他人,请在src/main/res/values中创建ids.xml

现在Android Studio将为您提供显式值的错误,如果这些值来自您正在使用的某些库,那么您无法在中间文件中进行更改,因此在此处进行更改并在合并代码时Android Studio负责处理它.


小智 5

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

并让你的资源文件像:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id"/>
</resources>
Run Code Online (Sandbox Code Playgroud)