Android X: знакомимся с изменениями в новой библиотеке поддержки

AndroidX

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-артефакты.

 

Перевод статьи «Hello World, AndroidX»

Вакансии в тему:

Лого компании «Finch»
Android-разработчик
Android-разработчик
Finch, Москва, от 80 000 до 150 000 ₽ (до налогов)
Лого компании «Банк Точка»
Android developer
Android developer
Банк Точка, Екатеринбург, 130 000 ₽