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

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

最近我将我的项目升级到 Android Studio 3.2.1、Gradel 4.6、Gradle Plugin 4.6 和 tagetSDKVersion 28。

但是我在合并的 values.xml 文件中遇到以下错误 -

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

来自合并 values.xml 的行导致了问题 -

<item name="date_picker_day" type="id">false</item>
<item name="date_picker_header" type="id">false</item>
<item name="date_picker_month" type="id">false</item>
<item name="date_picker_month_and_day" type="id">false</item>
<item name="date_picker_year" type="id">false</item>
<item name="day_picker_selected_date_layout" type="id">false</item>
<item name="done" type="id">false</item>
<item name="month_text_view" type="id">false</item>
<item name="animator" type="id">false</item>

确切的错误日志

Android resource compilation failed
Output:  C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6866: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6881: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6882: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6883: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6884: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6885: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6886: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6887: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:6896: error: <item> inner element must either be a resource reference or empty.
C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml:7419: warn: ignoring element 'g' with unknown namespace 'http://schemas.android.com/apk/res/android'.

Command: C:\Users58503\.gradle\caches\transforms-1\files-1.1\aapt2-3.2.1-4818971-windows.jar4ce88e9379d4536b62c1cf1690927a\aapt2-3.2.1-4818971-windows\aapt2.exe compile --legacy \
        -o \
        C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\res\merged\stage\debug \
        C:\AmrutData\Workspace\Q4\Mobile-Quitters-Circle-Android\app\build\intermediates\incremental\mergeStageDebugResources\merged.dir\values\values.xml
Daemon:  AAPT2 aapt2-3.2.1-4818971-windows Daemon #0

我确定这些不是来自我的价值观,其中大部分来自 class com.android.datetimepicker.date.DatePickerDialog 我不知道如何解决这个问题,因为这些来自图书馆和不是我的项目。

解决方法是: 在 res/values 文件夹中创建一个名为 ids.xml 的文件并放入以下内容:

`<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="sos_key_shift_state" type="id"/>
<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>`

这解决了我的问题...

经过大量搜索,我发现是我的图书馆之一导致了这个问题。我使用的库与 gradle 3.2.1 不兼容,导致编译出现问题。

我只是替换下面的代码

<item type="id" name="checkColor">false</item>

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

正如其他答案所述,您需要确保抛出异常的项目元素没有内部值。

在某些情况下,这些可能来自外部库,因此无法直接修改,在这种情况下,在文件夹 res/values.

中创建一个名为 ids.xml 的文件

在这里你可以覆盖任何导致问题的项目,对我来说我添加了以下内容来解决问题中所述的问题。

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

在项目的 res/values 文件夹下创建一个名为 ids.xml 的文件,它应该有

<?xml version="1.0" encoding="utf-8"?><resources>
<item name="animator" type="id"/>
<item name="date_picker_day" type="id" />
<item name="date_picker_header" type="id" />
<item name="date_picker_month" type="id" />
<item name="date_picker_month_and_day" type="id" />
<item name="date_picker_year" type="id" />
<item name="day_picker_selected_date_layout" type="id" />
<item name="done" type="id" />
<item name="month_text_view" type="id" />
<item name="reference" type="id" /></resources>