Разница между androidx и com.android.support
Я собирался использовать компоновку ограничений в своем проекте, когда заметил, что есть две разные зависимости, которые я могу использовать:
-
com.android.support.constraint:constraint-layout
-
androidx.constraintlayout:constraintlayout
Есть ли разница между этими двумя или некоторыми рекомендациями, которые предпочтительнее?
РЕДАКТИРОВАТЬ
Google прекращает поддержку com.android.support
и предлагает пользователям перейти на новый эквивалент androidx
.
Примечание. С выпуском Android 9.0 (уровень API 28) появилась новая версия библиотеки поддержки под названием AndroidX, которая входит в состав Jetpack. Библиотека AndroidX содержит существующую библиотеку поддержки, а также включает новейшие компоненты Jetpack.
Вы можете продолжать использовать библиотеку поддержки. Исторические артефакты (версии 27 и более ранние и упакованные как android.support. *) Останутся доступными в Google Maven. Тем не менее, все новые разработки библиотеки будут происходить в библиотеке AndroidX.
Мы рекомендуем использовать библиотеки AndroidX во всех новых проектах. Вам также следует подумать о переносе существующих проектов на AndroidX.
Вот официальное руководство по миграции и соответствующие библиотечные эквиваленты.
Ответы
Ответ 1
Все библиотеки поддержки отбрасывают теги v4 v7 v12 v13 и все рефакторируются в пакеты androidx.
Они по сути то же самое, но для будущей ссылки androidx будет библиотекой, которую мы должны использовать в наших приложениях.
Android studio 3.2 canary, которая выходит на этой неделе (неделя 14 мая 2018 года), должна иметь инструмент, который позволяет автоматически рефакторинг в пакеты androidx. Об этом было объявлено в google i/o 2018.
Ответ 2
Одно из различий между библиотеками AndroidX и Support заключается в том, что при использовании библиотек поддержки все библиотеки поддержки должны иметь одинаковую версию, но в androidX такого нет.
Другое дело, что в библиотеке поддержки, в большинстве случаев, когда вам нужен компонент в вашем приложении, вы должны добавить зависимости, которые содержат так много других вещей, которые вам действительно не нужны. но в AndroidX вы можете добавить только ту зависимость, которая вам нужна, и не более.
Ответ 3
Это может помочь,
Есть несколько различий в следующем:
В соответствии с действующим соглашением об именах неясно, какие пакеты связаны с операционной системой Android, а какие - с вашими приложениями APK (Android Package Kit). Чтобы устранить эту путаницу, все разделенные библиотеки будут перемещены в пространство имен AndroidXs androidx. *, А иерархия пакетов android. * Будет зарезервирована для пакетов, которые поставляются с операционной системой Android.
Например: android.content.Intent;
зависит от ОС Android & androidx.fragment.app.Fragment;
поставляется с APK
Первоначально имя каждого пакета указывало минимальный уровень API, поддерживаемый этим пакетом, например, support-v4. Однако версия 26.0.0 библиотеки поддержки увеличила минимальный API до 14, поэтому сегодня многие имена пакетов не имеют ничего общего с минимальным поддерживаемым уровнем API. Когда оба пакета support-v4 и support-v7 имеют минимальный API-интерфейс 14, легко понять, почему люди путаются! Так что теперь с AndroidX нет зависимости от уровня API.
- Это всего лишь расширение 2-го пункта, еще одно важное изменение заключается в том, что артефакты AndroidX будут обновляться независимо, поэтому вы сможете обновлять отдельные библиотеки AndroidX в своем проекте, вместо того, чтобы менять каждую зависимость сразу. Эти разочаровывающие "все библиотеки com.android.support должны использовать сообщения с одинаковой спецификацией версии" должны уйти в прошлое!
Ответ 4
Как сказано выше и в Миграция на AndroidX, вы можете легко мигрировать в AS:
В Android Studio 3.2 и более поздних версиях вы можете быстро перенести существующий проект для использования AndroidX, выбрав " Рефакторинг"> "Перенос в AndroidX" в строке меню.
Относительно разницы (TL;DR: нет нарушений, акцент мой)
AndroidX отображает исходные пакеты API библиотеки поддержки в пространство имен androidx. Изменены только имена пакетов и артефактов Maven; Имена классов, методов и полей не изменились.