Разница между 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

Это может помочь,

Есть несколько различий в следующем:

  1. В соответствии с действующим соглашением об именах неясно, какие пакеты связаны с операционной системой Android, а какие - с вашими приложениями APK (Android Package Kit). Чтобы устранить эту путаницу, все разделенные библиотеки будут перемещены в пространство имен AndroidXs androidx. *, А иерархия пакетов android. * Будет зарезервирована для пакетов, которые поставляются с операционной системой Android. Например: android.content.Intent; зависит от ОС Android & androidx.fragment.app.Fragment; поставляется с APK

  2. Первоначально имя каждого пакета указывало минимальный уровень API, поддерживаемый этим пакетом, например, support-v4. Однако версия 26.0.0 библиотеки поддержки увеличила минимальный API до 14, поэтому сегодня многие имена пакетов не имеют ничего общего с минимальным поддерживаемым уровнем API. Когда оба пакета support-v4 и support-v7 имеют минимальный API-интерфейс 14, легко понять, почему люди путаются! Так что теперь с AndroidX нет зависимости от уровня API.

  3. Это всего лишь расширение 2-го пункта, еще одно важное изменение заключается в том, что артефакты AndroidX будут обновляться независимо, поэтому вы сможете обновлять отдельные библиотеки AndroidX в своем проекте, вместо того, чтобы менять каждую зависимость сразу. Эти разочаровывающие "все библиотеки com.android.support должны использовать сообщения с одинаковой спецификацией версии" должны уйти в прошлое!

Ответ 4

Как сказано выше и в Миграция на AndroidX, вы можете легко мигрировать в AS:

В Android Studio 3.2 и более поздних версиях вы можете быстро перенести существующий проект для использования AndroidX, выбрав " Рефакторинг"> "Перенос в AndroidX" в строке меню.

Относительно разницы (TL;DR: нет нарушений, акцент мой)

AndroidX отображает исходные пакеты API библиотеки поддержки в пространство имен androidx. Изменены только имена пакетов и артефактов Maven; Имена классов, методов и полей не изменились.