Поэтому я обновил свою Android Studio до версии 3.2. Когда я попытался скомпилировать проект, сборка не удалась. Ниже приведена ошибка:
Android resource compilation failed
Output: C:\Users\Ashish\AndroidStudioProjects\StartUp\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:900: error: <item> inner element must either be a resource reference or empty.
Command: C:\Users\Ashish\.gradle\caches\transforms-1\files-1.1\aapt2-3.2.0-4818971-windows.jar\7f1fbe9171e916e5044000cd76b749c8\aapt2-3.2.0-4818971-windows\aapt2.exe compile --legacy \
-o \
C:\Users\Ashish\AndroidStudioProjects\StartUp\app\build\intermediates\res\merged\debug \
C:\Users\Ashish\AndroidStudioProjects\StartUp\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml
Daemon: AAPT2 aapt2-3.2.0-4818971-windows Daemon #0
Пожалуйста, сообщите, требуется ли дополнительная информация. Любая помощь будет оценена по достоинству.
<item> в values.xml в строке 900 ... может относиться к типу ресурса id.
правильный синтаксис будет (как указано в сообщении об ошибке):
<?xml version = "1.0" encoding = "utf-8"?>
<resources>
<item type = "id" name = "id_name" />
</resources>
см. документация.
Хорошо, но как это изменить? Даже если я изменяю вручную и перестраиваю, он снова сделает этот файл таким же.
@AshishYadav откройте values.xml, перейдите к line 900, а затем удалите содержимое между > и <. все, что там содержится, имеет недопустимый синтаксис (и никогда не служил никакой цели). если вы хотите хранить там числа, просто замените type = "id" на type = "integer" (где значения допустимы).
Даже если я удалю его и построю снова, он снова появится и снова покажет ту же ошибку.
@AshishYadav это происходит из кешированных значений инкрементной сборки (сообщение читается как build\intermediates\incremental); clean и rebuild проект, то и этот кеш тоже должен быть в порядке.
@AshishYadav, это бессмысленно. просто удалите каталог build вручную.
Я столкнулся с этой проблемой сегодня после обновления gradle с 3.1.4 до 3.2.0. Я не знаю почему, но сборка начал выбрасывает это исключение. Я удалил папку build и удалил папку gradle caches, но ничего не работало, поэтому я посмотрел на объединенный values.xml и выяснил, что мой ids.xml определял неправильный идентификатор, который был объединен с values.xml:
<?xml version = "1.0" encoding = "utf-8"?>
<resources>
<item name = "downloading_package" type = "id">Baixando pacote de sincronização</item>
</resources>
И, видимо, это работало до обновления ... в моем случае я удалил файл ids.xml (в проекте он был бесполезен)
Хотел бы я знать почему до обновления все работало
Да вы правы!! Оказывается, ошибка в value.xml была из-за строки в ids.xml. Я просто заменил <item name = "action_settings" type = "id">action_settings</item> на <item name = "action_settings" type = "id"></item>, и это сработало. Нет необходимости удалять весь файл ids.xml.
Привет всем, причина, по которой это работало раньше, заключалась в том, что неправильное значение игнорировалось. Однако это может повлиять на размер таблицы ресурсов (afaik) и, следовательно, на приложение, а также заставить пользователей поверить в неправильное поведение (например, вы можете присвоить строку идентификатору). Теперь AAPT2 строже и не сообщает вам, что вам нужно удалить значение или использовать ссылку на другой идентификатор (для соответствия типу).
В моем случае проблема с тегами xml существует только в файле workspace.xml в .idea <item name = "cc_entry_internal" type = "id"> 3000 </item>, что мне делать?
Ответ Ашиша Ядава сработал для меня. Комментарий был не очень понятен. Я просто хочу объяснить, что @AshishYadav предложил отредактировать файл ids.xml и удалить action_settings из <item name = "action_settings" type = "id"> action_settings </item>
в вашем градиенте сборки (Project: name) сделайте это так
classpath 'com.android.tools.build:gradle:3.+'
затем перестройте свой проект .. после этого он покажет сообщение об обновлении вашего gradle с 4.6 до 4.10
верните его в 3.2.0, и вы должны проверить свою форму ids.xml на любые символы, не являющиеся символами, например ('# или что-то в этом роде)
Я также столкнулся с проблемой, вам просто нужно найти, где находятся значения, и обновить его с <item type = "id" name = "id_name" >id_name</item> до <item type = "id" name = "id_name" />, теперь все в порядке.
Несколько минут назад я заканчиваю эту проблему, пытаюсь изменить или удалить id.xml, если вы думаете, что у вас его нет, попробуйте найти в другом модуле вашего приложения. Я изменил свой ресурс ценности с <item name = "header_view" type = "id">header_view</item> на <item name = "header_view" type = "id"/>, и у меня это сработало.
В моем случае
<?xml version = "1.0" encoding = "utf-8"?>
повторяется дважды в XML. Убедитесь, что это должно быть по одному на файл в верхней части XML.
Вот что сработало для меня:
В моем файле build.gradle> dependencies я реализовал более новую версию библиотеки appcompat
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:support-v4:21.0.3'
implementation 'com.android.support:appcompat-v7:21.0.3'
implementation 'androidx.appcompat:appcompat:1.0.2'}
После комментирования //implementation 'androidx.appcompat:appcompat:1.0.2' все заработало нормально. Я бы посоветовал, даже если это другая библиотека, пожалуйста, проверьте версию, которую вы используете.
Для меня у меня была ширина и высота макета в представлении макета и в представлении LinearLayout для привязки данных. Это вызвало повторяющуюся ошибку.
Я исправил это, удалив атрибуты layout_width и layout_height в <layout>.
В своем XML-файле вы можете забыть добавить />, чтобы закрепить свой атрибут.
У меня возникла эта проблема, когда я цитировал в теге <string>
<string name = "vj_dialogue">I'm waiting</string>
когда я сбежал с обратной косой чертой ''. Проблема исчезла
<string name = "vj_dialogue">I\'m waiting</string>
просто измените свое имя attr, которое присутствует в ресурсе -> значения -> attr
<attr name = "fontFamilys">
<enum name = "roboto" value = "0" />
<enum name = "roboto_condensed" value = "1" />
<enum name = "roboto_slab" value = "2" />
</attr>
например, если вы получаете ошибку, связанную с fontFamily, просто измените имя build, ошибка приложения не появится
Возможный дубликат, но это может быть то, что вы ищете, если приедете сюда свежим - stackoverflow.com/a/56609626/4458638