Android X: знакомимся с изменениями в новой библиотеке поддержки
AndoidX — новая библиотека поддержки от Google, которая добавляет новые функции и изменяет некоторые старые. Разбираемся с нововведениями.
28К открытий29К показов
Google перенесла разработку проекта AndroidX на AOSP. AndroidX — новая библиотека поддержки, которая добавляет новые функции и изменяет некоторые старые. Поговорим об этих изменениях.
Пространства имён android.* против androidx.*
Android-приложения зависят от двух типов классов:
- Классы вроде
PackageManager
, которые идут в комплекте с операционной системой и могут иметь разные API и поведение на разных версиях Android; - Классы вроде
AppCompatActivity
илиViewModel
, которые отделены от операционной системы и включаются в ваш apk. Эти библиотеки пишутся для предоставления API, поведение которого будет неизменным на как можно большем количестве версий Android.
Зачастую библиотеки, не идущие в комплекте, будут лучшим выбором, так как они предоставляют API для многих версий Android. Теперь все такие библиотеки, включая оные из Support Library и Architecture Components, будут включены в пространство имён androidx.*
, чтобы вы понимали, какие зависимости нужно подключать.
Изменение в именовании пакетов и артефактов Maven
Также была переработана структура пакетов, чтобы поощрить создание небольших, более сфокусированных библиотек, которые уменьшат давление на приложения и тесты, не использующие ProGuard и Multidex. Были обновлены groupId
и artifactId
Maven, чтобы лучше отражать содержимое библиотеки. Кроме того, теперь к пакетам библиотеки добавляется префикс в виде их groupId
, чтобы создать очевидную связь между используемым классом и артефактом Maven, из которого он берётся.
Сейчас вы можете ожидать следующее сопоставление старых пакетов с новыми:
android.support.**
→ androidx.@
android.databinding.**
→ androidx.databinding.@
android.design.**
→ com.google.android.material.@
android.support.test.**
→ (в будущем релизе) androidx.test.@
Так как библиотеки Architecture Components теперь включены в пакет AndroidX, их имена были упрощены, чтобы отразить их интеграцию с основными библиотеками. Примеры изменений:
android.arch.**
→ androidx.@
android.arch.persistence.room.**
→ androidx.room.@
android.arch.persistence.**
→ androidx.sqlite.@
Кроме того, поскольку в версии 28.0.0-alpha1 Material Components станут заменой Design Library, был обновлён пакет дизайна, чтобы отразить его новое направление.
Для получения полного списка сопоставлений от 28.0.0-alpha1 (android.support
) к 1.0.0-alpha1 (androidx
) посетите эту страницу. Учтите, что в течение альфа-стадии в этот список могут быть внесены небольшие изменения.
Строгое версионирование для каждой библиотеки
Начиная с рефакторинга AndroidX, версии библиотек были сброшены с 28.0.0 до 1.0.0. Будущие обновления будут версионироваться отдельно для каждой библиотеки, следуя строгим правилам, согласно которым основная версия будет указывать на бинарную совместимость. Это значит, например, что вы можете добавить и использовать новую функцию в RecyclerView без обновления всех остальных библиотек, используемых вашим приложением. Также это значит, что библиотеки, зависящие от androidx
, могут предоставить гарантии приемлемой совместимости с будущими релизами AndroidX — так, зависимость от версии 1.5.0 может работать с версией 1.7.0, но, скорее всего, не будет работать с версией 2.0.0.
Миграция с 28.0.0-alpha1
Переход приложения от зависимостей android.support
к зависимостям androidx
проходит в два основных этапа: рефакторинг исходного кода и перевод зависимостей.
Рефакторинг исходного кода обновляет Java-код, XML-ресурсы и конфигурацию Gradle таким образом, чтобы ссылаться на отрефакторенные классы и артефакты Maven. Эта функция доступна в Android Studio Canary 14 для приложений, ориентированных на Android P.
Если вы зависите от библиотеки, которая ссылается на более старую версию Support Library, Android Studio обновит эту библиотеку с помощью перевода зависимостей так, чтобы она ссылалась на androidx
. Перевод зависимостей автоматически применяется Android Gradle Plugin 3.2.0-alpha14, который переписывает байт-код и ресурсы зависимостей JAR и AAR (а также транзитивных зависимостей) таким образом, чтобы они ссылались на новые androidx
классы и артефакты. Также будет доступен отдельный инструмент для перевода в формате JAR.
Что дальше?
Разумеется, этот переход — не минутное дело, и потому не все успеют его совершить. Поэтому android.support
-библиотеки будут получать параллельные обновления на время превью P SDK. Эти обновления будут следовать схеме версионирования 28.0.0, которая появилась в 28.0.0-alpha1 в марте 2018 и будут совместимы с существующими проектами, зависящими от пакета android.support
.
Стабильный релиз 28.0.0 будет последним android.support
-релизом. Все последующие будут доступны только как androidx
-артефакты.
28К открытий29К показов