Есть ли законное использование для @+android:id?

После того, как я обновил свои инструменты Android до последней версии для работы с API21, попытка скомпилировать мой проект привела к следующей ошибке:

  • update_languages_button_preference_layout.xml: 2: note: Вы хотели использовать @+id вместо @+android:id?
  • update_languages_button_preference_layout.xml: 2: ошибка: создание ресурса для внешнего пакета android: id / layout.
  • update_languages_button_preference_layout.xml: 2: ошибка: ошибка: не найден ресурс, соответствующий данному имени (в 'id' со значением '@+android:id / layout').

Кажется, проблема в линии android:id="@+android:id/layout": замены @+android:id на @+id было достаточно для нормальной компиляции и запуска проекта.

Тем не менее, быстрый поиск по всей базе кода выявил несколько других мест в проекте, где строительство android:id="@+android:id/... используется. Это, очевидно, не помешало проекту пройти все тесты, даже если я не могу заверить, что они все еще используются.

  • Есть ли законное использование android:id="@+android:id это оправдывало бы оставлять эти ссылки в наших XML-файлах, а не заменять их всеми @+id?

  • Почему они не подняли ту же ошибку, что и первый файл?

2 ответа

Решение

Нет, вы никогда не должны использовать @+android:id в своем приложении. Пространство имен Android зарезервировано для платформы. Это никогда не было безопасно для приложения, и теперь будет генерировать ошибку компиляции.

Для небольшого фона генерация новых идентификаторов в пространстве имен Android поместит их в неиспользуемое пространство после существующих идентификаторов пространства имен Android. Это будет работать до тех пор, пока новые идентификаторы не будут добавлены в структуру, после чего ваш внутренний идентификатор будет перекрываться с фактическим идентификатором структуры и вызывать странные проблемы.

Что касается других случаев, то они также должны вызывать ошибки. Возможно, в AAPT есть ошибка. В любом случае, вы должны удалить все экземпляры @ + android из ваших ресурсов.

Хотя мой комментарий очень поздно. Я столкнулся с той же проблемой сегодня, когда обновил мое затмение и инструменты. Изменил @+android:id на @+id, и это решило мою проблему.

Другие вопросы по тегам