Android - Inner element must either be a resource reference or empty

AndroidAndroid LayoutAndroid Gradle-PluginAapt

Android Problem Overview


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"

Android Solutions


Solution 1 - Android

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>

Solution 2 - Android

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.

Solution 3 - Android

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.

Solution 4 - Android

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>

Solution 5 - Android

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>

Solution 6 - Android

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!

Solution 7 - Android

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.

Solution 8 - Android

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMable JohnView Question on Stackoverflow
Solution 1 - AndroidSangeet SureshView Answer on Stackoverflow
Solution 2 - AndroiddnaView Answer on Stackoverflow
Solution 3 - AndroidSangam PandeyView Answer on Stackoverflow
Solution 4 - AndroidOliver ManyasaView Answer on Stackoverflow
Solution 5 - AndroidTomas KasnauskasView Answer on Stackoverflow
Solution 6 - AndroidPatrick SteilView Answer on Stackoverflow
Solution 7 - AndroidGurjinder SinghView Answer on Stackoverflow
Solution 8 - AndroidLance SamariaView Answer on Stackoverflow