Что такое AndroidX?

255

Я читаю о комнате библиотеки Android. Я вижу, они изменили пакет androidна androidx. Я не понимал, что. Может кто-нибудь объяснить, пожалуйста?

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

Даже это доступно с androidпакетом также.

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  • Зачем нужно было упаковывать новые библиотеки поддержки androidxвместо android?
  • Вариант использования и влияние факторов в существующих проектах.
Khemraj
источник
4
Прочтите developer.android.com/topic/libraries/support-library/… . androidx.*иерархия пакетов для библиотек поддержки Все они будут поставляться в том же пакете, что и мы в эпоху androidx(как компоненты архитектуры, другие библиотеки поддержки).
ADM
3
Что вы точно не поняли? Почему они изменили пакет?
Rohit5k2
@ ADM, почему они перешли на androidxпакет из CORE android.
Хемрай
2
Они просто перепроектировали структуру пакета ради простоты. Это также было объявлено в IO 2018, если вы хотите посмотреть. Thx
ADM

Ответы:

335

AndroidX - библиотека расширений Android

Из документации AndroidX

Мы внедряем новую структуру пакетов, чтобы было понятнее, какие пакеты связаны с операционной системой Android, а какие - с APK вашего приложения. В дальнейшем иерархия пакетов android. * Будет зарезервирована для пакетов Android, которые поставляются с операционной системой. Другие пакеты будут выпущены в новой иерархии пакетов androidx. * Как часть библиотеки AndroidX.

Нужен AndroidX

AndroidX - это переработанная библиотека, чтобы сделать имена пакетов более понятными. Таким образом, теперь иерархия Android будет доступна только для классов Android по умолчанию, которые поставляются с операционной системой Android, а другие библиотеки / зависимости будут частью Android (имеет больше смысла). Так что теперь все новые разработки будут обновляться в AndroidX.

com.android.support. **: androidx.
com.android.support:appcompat-v7: androidx.appcompat: appcompat com.android.support:recyclerview-v7: androidx.recyclerview: recyclerview com.android.support:design: com.google.android.material: материал

Полное сопоставление артефактов для пакетов AndroidX

AndroidX использует Semantic-версию

Ранее support libraryиспользовалась версия SDK, но AndroidX использует Semantic-version. Он собирается пересмотреть версию с 28.0.0 → 1.0.0.

Как перенести текущий проект

В Android Studio 3.2 (сентябрь 2018 г.) есть прямая возможность перенести существующий проект в AndroidX. Этот рефакторинг всех пакетов автоматически.

Перед миграцией настоятельно рекомендуется сделать резервную копию вашего проекта.

Существующий проект

  • Android Studio> Меню Refactor> Миграция в AndroidX ...
  • Он проанализирует и откроет окно Refractor в нижней части. Принять изменения, которые будут сделаны.

образ

Новый проект

Поместите эти флаги в свой gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Проверьте соответствие @ Library для одинакового пакета AndroidX .

Проверьте @ Официальная страница Миграция на AndroidX

Что такое Jetifier?

Ошибки миграции

  • Если вы создаете приложение и после миграции обнаруживаете ошибки, вам нужно исправить эти незначительные ошибки. Вы не застрянете там, потому что это легко исправить.
  • Сторонние библиотеки в каталоге не конвертируются в AndroidX, но конвертируются во время выполнения Jetifier , поэтому не беспокойтесь об ошибках времени компиляции, ваше приложение будет работать отлично.

Поддержка 28.0.0 это последний выпуск?

От версии поддержки Android 28.0.0

Это будет последний выпуск функции в пакете android.support , и разработчикам рекомендуется перейти на AndroidX 1.0.0

Так что иди с AndroidX, потому что Android теперь будет обновлять только пакет AndroidX.

Дальнейшее чтение

https://developer.android.com/topic/libraries/support-library/androidx-overview

https://android-developers.googleblog.com/2018/05/hello-world-androidx.html

Khemraj
источник
2
@androidmalin Рад слышать от вас - эта информация помогла вам :)
Хемрай
При каких обстоятельствах можно / нужно установить enableJetifier в false?
Марк
1
@Mark enableJetifier=falseявляется значением по умолчанию. Это неверно, когда вы не установите его. Это означает, что ни одна из ваших библиотек не будет переписана на AndroidX.
Хемрай
4
Миграция андроид студии плохо работает. мне пришлось вручную исправлять сотни файлов ... я трачу больше времени на исправление кода из-за изменений в инструментах Google, чем на собственно программирование кода, который имеет значение ... вздох
LearningPath
1
Это сейчас (3.3) называетсяMigrate to AndroidX
Дейл
32

На основании документации :

androidx - это новая структура пакетов, чтобы было понятнее, какие пакеты связаны с операционной системой Android, а какие - с APK вашего приложения. В дальнейшем иерархия пакетов android. * Будет зарезервирована для пакетов Android, которые поставляются с операционной системой; другие пакеты будут выпущены в новой иерархии пакетов androidx. *.

Перепроектированная структура пакета должна поощрять меньшие и более сосредоточенные библиотеки. Вы найдете подробности относительно отображений артефактов здесь .

Существуют вспомогательные библиотеки (содержащие компонент и пакеты для обратной совместимости) с именем «v7», когда минимальный поддерживаемый уровень SDK равен 14, новое наименование дает четкое представление о разделении между API-интерфейсами в комплекте с платформой и используемыми библиотеками для разработчиков приложений. на разных версиях Android. Вы можете обратиться к официальному объявлению для более подробной информации.

Сагар
источник
22

AndroidX - это проект с открытым исходным кодом, который команда Android использует для разработки, тестирования, упаковки, версии и выпуска библиотек в Jetpack .

AndroidX - значительное улучшение оригинальной библиотеки поддержки Android . Как и библиотека поддержки, AndroidX поставляется отдельно от ОС Android и обеспечивает обратную совместимость между версиями Android. AndroidX полностью заменяет библиотеку поддержки, предоставляя функции четности и новые библиотеки.

AndroidX включает в себя следующие функции:

  • Все пакеты в AndroidX живут в согласованном пространстве имен, начиная со строки androidx. Пакеты библиотеки поддержки были сопоставлены с соответствующими пакетами androidx. *. Полное отображение всех старых классов и артефактов сборки на новые см. На странице «Рефакторинг пакетов».

  • В отличие от библиотеки поддержки, пакеты AndroidX поддерживаются и обновляются отдельно. Пакеты androidx используют строгую Semantic Versioningверсию начиная с версии 1.0.0. Вы можете самостоятельно обновлять библиотеки AndroidX в своем проекте.

  • Все новые разработки библиотеки поддержки будут происходить в библиотеке AndroidX. Это включает в себя обслуживание оригинальных артефактов библиотеки поддержки и введение новых компонентов Jetpack.

Использование AndroidX

См. Миграция на AndroidX, чтобы узнать, как перенести существующий проект.

Если вы хотите использовать AndroidX в новом проекте, вам нужно установить SDK для компиляции на Android 9.0 (уровень API 28) или выше и установить оба значения следующих флагов плагина Android Gradle в true gradle.properties.

  • android.useAndroidX: При значении true плагин Android использует соответствующую библиотеку AndroidX вместо библиотеки поддержки. По умолчанию флаг имеет значение false, если он не указан.

  • android.enableJetifier: При значении true плагин Android автоматически переносит существующие сторонние библиотеки для использования AndroidX, переписывая их двоичные файлы. По умолчанию флаг имеет значение false, если он не указан.

Для отображения артефактов смотрите это

Basi
источник
14

Эта статья Android Jetpack: Что означают последние анонсы для библиотеки поддержки Android? хорошо объясняет

Сегодня многие считают, что библиотека поддержки является неотъемлемой частью разработки приложений для Android, так что ее используют 99 процентов приложений в магазине Google Play. Однако по мере роста библиотеки поддержки возникли несоответствия в соглашении об именах библиотеки.

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

Чтобы устранить эту путаницу, Google в настоящее время реорганизует Библиотеку поддержки в новую структуру пакета библиотеки расширений Android (AndroidX). AndroidX будет содержать упрощенные имена пакетов, а также Maven groupIds и artifactIds, которые лучше отражают содержимое каждого пакета и поддерживаемые уровни API.

В соответствии с действующим соглашением об именах также не ясно, какие пакеты связаны с операционной системой Android, а какие - с APK (Android Package Kit) вашего приложения . Чтобы устранить эту путаницу, все разделенные библиотеки будут перемещены в пространство имен AndroidX androidx. *, А иерархия пакетов android. * Будет зарезервирована для пакетов, поставляемых с операционной системой Android .

onmyway133
источник
12

Просто несколько битов с моей стороны ко всем доступным ответам

Нужен AndroidX

  1. Как сказано в удивительном ответе @KhemRaj,

В соответствии с действующим соглашением об именах неясно, какие пакеты связаны с операционной системой Android , а какие - с APK ( Android Package Kit ) вашего приложения . Чтобы прояснить эту путаницу, все разукрупненные библиотеки будут перемещены в AndroidX «s androidx. * Пространство имена, в то время как Android. * Иерархия пакета будет зарезервирована для пакетов , которые поставляются с Android операционной системы.

  1. Кроме этого,

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

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

Абхишек Кумар
источник
7

Я узнал об AndroidX из этого видео на Android Dev Summit . Обобщение -

  1. Больше нет библиотеки поддержки: Google никогда не будет поддерживать библиотеку поддержки Android в пространстве имен библиотеки поддержки. Поэтому, если вы хотите найти исправление ошибки в библиотеке поддержки, вам необходимо перенести проект в AndroidX.
  2. Лучшее управление пакетами: для стандартизированного и независимого управления версиями. Потому что предыдущие версии поддержки библиотеки были слишком запутанными. Это избавит вас от сообщения «Все библиотеки com.android.support должны использовать одну и ту же версию спецификации» .
  3. Другие библиотеки Бога были перенесены на AndroidX : сервисы Google Play, Firebase, Mockito 2 и т. Д. Перенесены на AndroidX.
  4. Новые библиотеки будут опубликованы с использованием артефакта AndroidX: все библиотеки будут находиться в пространстве имен AndroidX, как Android Jetpack
ГК Мухаммед Эмон
источник
4

Это то же самое, что и версии поддержки AppCompat, но в нем меньше путаницы версий v4 и v7, поэтому очень полезно использовать различные компоненты XML-элементов Android.

Радж Кавадия
источник
4

androidxзаменит support libraryпосле 28.0.0. Вы должны перенести свой проект, чтобы использовать его. androidxиспользует Semantic Versioning. Использование AndroidXне будет смущать версией, представленной в имени библиотеки и имени пакета. Жизнь становится проще

[AndroidX и поддержка совместимости]

yoAlex5
источник
3

AndroidX - это проект с открытым исходным кодом, который команда Android использует для разработки, тестирования, упаковки, версии и выпуска библиотек в Jetpack.

После нескольких часов борьбы я решил эту проблему, добавив в app / build.gradle следующее:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

Поместите эти флаги в свой gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Changes in gradle:

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha04'

При миграции на Android Studio файл приложения / Gradle автоматически обновляется в соответствии с реализациями библиотеки исправлений из стандартной библиотеки.

См. Https://developer.android.com/jetpack/androidx/migrate.

Канварптрит Сингх
источник
0

Android предоставляет несколько разных наборов библиотек. Один из них называется «Библиотека поддержки Android», а другой - «AndroidX». Выбор «Использовать Android. * Артефакты» означает, что мы хотим использовать AndroidX.

Патрик Сьюбахиро
источник