58

Error Details

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.

Resource File

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

Build Environment

  • Android Studio 3.1.4
  • minSdkVersion = 21
  • targetSdkVersion = 28
  • compileSdkVersion = 28
  • buildToolsVersion = "28.0.2"
Mable John
  • 4,518
  • 3
  • 22
  • 35

8 Answers8

102

When declaring id in resources, the body should be empty

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

For more info please have a look on below link

https://developer.android.com/guide/topics/resources/more-resources#Id

So as Oliver Manyasa mentioned, it should be as below

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="tv_deviceName" type="id"/>
</resources>
Sangeet Suresh
  • 2,527
  • 1
  • 18
  • 19
22

I had a similar issue after upgrading to Android Studio 3.2.1

The error was pointing to this item in ids.xml file

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

As mentioned by the user Sangeet Suresh, I changed it to

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

That fixed the issue.

dna
  • 537
  • 3
  • 8
11

To all others who are still scratching their head to get the solution for this is create ids.xml inside src/main/res/values with contents similar to the following (but make sure to update it with the ids you're seeing errors for):

<?xml version="1.0" ?>
<items>
    <item name="animator" type="id"/>
    <item name="date_picker_day" type="id"/>
    <string name="deleted_key"/>
</items>

Now Android Studio will be giving you an error for explicit values and if those values are coming from some library you are using then you can't make a change in the intermediate file so instead change here and while merging your code Android studio takes care of it.

Nikita R.
  • 7,245
  • 3
  • 51
  • 62
Sangam Pandey
  • 111
  • 3
  • 6
  • Great solution! Just override these values, items, strings etc. in your own resources! – Kirill Karmazin Feb 13 '19 at 15:58
  • 1
    Can you elaborate your answer a little giving an example ids.xml file? I tried what you suggested but the same items are coming up in the errors after a rebuild? – user3284707 Mar 23 '19 at 07:46
6

On your Resource File remove the closing tag plus the Body i.e Remove "tv_deviceName"

and let your resource file be like:

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

I had below error

error: <item> inner element must either be a resource reference or empty.

In my case I created new test project and deleted the toolbar and fab from activity_main.xml file but these were also in ids.xml file. After deleting both ids from ids.xml file I was able to run. In your ids.xml file you may have lots of ID's but as I created a new project So, It has No IDs.

enter image description here

In above screenshot you can see the exact file location.

Gurjinder Singh
  • 9,221
  • 1
  • 66
  • 58
3

For me this was actually failing because the new gradle versions. I am pretty sure that some plugins I'm using have incompatibilities with newest gradle. I ended up with success build having the following versions:

gradle-wrapper.properties file:

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

build.gradle file

 dependencies {
   classpath 'com.android.tools.build:gradle:3.0.1'
 }

EDIT:

As we want to use 3.2.+ versions now, that isn't a reliable solution.

What I ended up doing is creating a new ids.xml file, and overriding all the values that have been conflicting.

ids.xml file example:

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

I simply created this auto-generated file in res/xml/values with empty tags like

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

That did the trick!

Neil Hoff
  • 2,025
  • 4
  • 29
  • 53
1

In the the values folder I double clicked the ids.xml file this was causing the issue

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

enter image description here

I tried the some of the voted answers:

<item name="roll_button" type="id">

But I got an error that said:

The element type "item" must be terminated by the matching end-tag "</item>".

So to fix I just added the matching ending tag:

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

UPDATE

I'm new to Kotlin so what I just noticed and what I didn't realize is the <item name="roll_button" type="id" /> needs the forward slash at the end to go before the closing >. If you don't include it then you will get the error I got but if you do include it the accepted answer works.

Lance Samaria
  • 17,576
  • 18
  • 108
  • 256