Есть ли законное использование для @+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, и это решило мою проблему.