Android

Android Jetpack — это набор библиотек, направленных на то, чтобы помочь вам легко писать высококачественные приложения, поддерживая более старые версии Android. Спустя два года после запуска Jetpack мы наблюдаем огромное внедрение приложений от крупных команд разработчиков и тех, кто только начал работать. И это только начало: сегодня мы запускаем новые библиотеки, а также основные обновления существующих, над которыми мы работали в течение последнего года. Здесь можно найти расширенный видео-обзор последних обновлений в Jetpack.

Новое в Альфе

Рекомендуемая библиотека Hilt от Jetpack для инъекции зависимостей

Hilt — это новая библиотека Android, которая упрощает внедрение зависимостей (DI) в приложении. Hilt позволяет сосредоточиться только на важных частях определения и инъекции связок, не беспокоясь об управлении всеми настройками DI и настройкой связей (wiring).

Собранная поверх Dagger, Hilt выигрывает от своей корректности во время компиляции, улучшенной производительности среды выполнения и масштабируемости. Hilt добавляет интеграцию с библиотеками Jetpack и классами фреймворка Android. Например, чтобы ввести параметры ViewModel, теперь можно аннотировать его конструктор с помощью @ViewModelInject, а затем аннотировать Fragment с помощью @AndroidEntryPoint:

<!-- Copyright 2019 Google LLC.	
   SPDX-License-Identifier: Apache-2.0 -->

class SearchViewModel @ViewModelInject constructor(
    private val repository: SearchRepository
): ViewModel() { … }

@AndroidEntryPoint
class SearchFragment : Fragment() {
    val viewModel: SearchViewModel by viewModels()
}

Узнайте больше о Hilt и откройте для себя больше ссылок на связанные ресурсы в нашем блоге запуска.

Paging 3 — постепенная загрузка и отображение данных

Paging — это библиотека, которая помогает загружать и отображать небольшие фрагменты данных постепенно. Сегодня мы выпускаем Paging 3 — полностью переписанную библиотеку с использованием корутин Kotlin. Этот новый релиз добавляет очень востребованные функции, такие как разделители, верхние и нижние колонтитулы и преобразования списков, а также API для наблюдения за состоянием загрузки списка и методами повторной попытки и обновления.

Например, с помощью Paging 3 источник данных может быть определен путем расширения класса PagingSource и реализации функции load suspend, где вы можете непосредственно вызывать другие функции suspend:

<!-- Copyright 2019 Google LLC.	
   SPDX-License-Identifier: Apache-2.0 -->

class MyPagingSource : PagingSource<Key, Value>() {
    override suspend fun load(params: LoadParams<Key>): LoadResult<Key, Value> {
        try {
            val result = api.requestPage(params.key)
            return Page(
                data = result.items,
                nextKey = result.nextKey
            )
        } catch(error: IOException) {
            return Error(error)
        }
    }
}

Для получения дополнительной информации о Paging 3 ознакомьтесь с документацией и нашим codelab.

App Startup — инициализация компонентов при запуске приложения

Библиотека App Startup предоставляет простой и эффективный способ инициализации компонентов при запуске приложения. Вместо определения отдельных поставщиков контента для каждого компонента, который необходимо инициализировать, App Startup позволяет определить инициализаторов компонентов, совместно использующих одного поставщика контента. Это может значительно улучшить время запуска приложения.

Пример использования App Startup для улучшения времени инициализации WorkManager (библиотека, которая использует ContentProvider под капотом) после отключения ContentProvider в WorkManager:

<!-- Copyright 2019 Google LLC.	
   SPDX-License-Identifier: Apache-2.0 -->

class WorkManagerInitializer : Initializer<WorkManager> {
    override fun create(context: Context): WorkManager {
        val configuration = Configuration.Builder()
            .setMinimumLoggingLevel(Log.DEBUG)
            .build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }
    
    override fun dependencies() : List<Class<out Initializer<*>>> = emptyList()
}

Для получения дополнительной информации о App Startup ознакомьтесь с официальной документацией.

Интеграция IME с автоматическим заполнением

Android 11 представляет API платформы для клавиатур, отображающие предложения автозаполнения из таких приложений, как менеджеры паролей. API Autofill для Jetpack облегчает клавиатурам и сервисам автозаполнения возможность воспользоваться этой новой функцией через класс InlineSuggestionUi. Сервисы автозаполнения могут использовать этот класс для создания совместимых предложений, а клавиатуры — для настройки стиля предложений.

Клавиатура отображает предложение автоматического ввода номера карты

Упрощенная анимация с помощью core-animation и SeekableAnimatedVectorDrawable

Чтобы упростить реализацию и тестирование анимации, мы добавили две новые библиотеки: androidx.core:core-animation и androidx.core:core-animation-testing. Мы также представили новый API SeekableAnimatedVectorDrawable как часть библиотеки androidx.vectordrawable.

core-animation адаптирует все функции, добавленные в API Animator со времен Ice Cream Sandwich, такие как пауза/продолжить и поиск.

SeekableAnimatedVectorDrawable, основанный на core-animation, является новой альтернативой AnimatedVectorDrawable (AVD). Он использует тот же формат, что и AVD, добавляя возможность поиска, приостановки и возобновления воспроизведения. Поисковые AVD не могут использовать поток рендеринга, поэтому их лучше использовать только, когда требуются дополнительные функции нового класса.

Отладка базы данных с помощью Database Inspector в Android Studio

Использование Database inspector в Android Studio

Отладка проблем с базой данных стала проще в бета-версии Android Studio 4.1 с новым Database Inspector. Этот инструмент позволяет проверять, запрашивать и изменять базы данных SQLite в запущенном приложении. Независимо от того, используете ли вы непосредственно Room или SQLite, вы можете начать отладку БД, выбрав в строке меню View > Tool Windows > Database Inspector. Узнайте больше об этом инструменте и о том, как его использовать, в этом блоге.

WindowManager — улучшенная поддержка форм-факторов устройств

Библиотека WindowManager — это новое дополнение к Android Jetpack, которое используется для поддержки новых форм-факторов, таких как складные смартфоны, экраны с “челкой” и другие. Она предоставляет общий API для различных функций WindowManager как в старых, так и в новых версиях платформы.

Начальный релиз обеспечивает поддержку различных типов складных устройств, уже существующих и поступающих на рынок, так что разработчики приложений могут ориентироваться на целые категории аппаратных конфигураций. Ознакомьтесь с обзором в этом блоге и примерами, чтобы узнать больше.

MotionLayout — создание плавной и интерактивной анимации для Android

MotionLayout API расширяет богатые возможности ConstraintLayout, чтобы помочь разработчикам Android управлять сложным движением и анимацией виджетов в приложениях. С помощью MotionLayout вы можете моделировать свои анимации как переходы между ConstraintSets и легко интегрировать анимации с общими представлениями, такими как RecyclerView и ViewPager. Android Studio 4.0 также включает в себя Motion Editor, графический инструмент для создания и предварительного просмотра анимации, использующей MotionLayout

Создавайте, редактируйте и смотрите превью анимации MotionLayout в Motion Editor

Обновления существующих библиотек

Навигация

Navigation 2.3 добавляет поддержку динамических функциональных модулей, которые позволяют загружать фрагменты приложения по мере необходимости пользователя, значительно уменьшая начальный размер загрузки. Теперь вы можете перейти к этим модулям так, будто это часть базового APK. Наряду с разрешением параметров запроса, deep link (открытие приложения на устройстве через URL) теперь поддерживает пользовательские действия и типы mime.

Новый API для возврата результата позволяет запрашивать любую запись обратного стека и устанавливать результат на его SavedStateHandle. Новый TestNavHostController позволяет получить доступ к обратному стеку навигации и установить текущее назначение в тестах.

WorkManager

В последних версиях WorkManager добавлена поддержка длительной или важной работы, активность которой должна сохраняться операционной системой с помощью foreground service.

Чтобы упростить диагностику проблем с задачами WorkManager, мы добавили новый API, который позволяет заглянуть во внутреннее состояние WorkManager и сохранить его в logcat. Пример результата диагностики WorkManager:

Recently completed work:
Id Class Name Job Id State Unique Name Tags
88e31476–50d5–4a3a-855a-7c158d61543e com.example.DiagnosticsWorker null SUCCEEDED com.example.DiagnosticsWorker
939d3d81–4a24–4920-ab6a-2a5b850f377b com.example.ToastWorker null SUCCEEDED com.example.ToastWorker
59ab8eb1–2645–446d-8811–1e7b887ab5bc com.example.ForegroundWorker null CANCELLED com.example.ForegroundWorker
7a6c23d2-a1f9–4477-af77–1f16b45cd765 com.example.ForegroundWorker 0 SUCCEEDED com.example.ForegroundWorker

Running work:
Id Class Name Job Id State Unique Name Tags
7c8bc01f-a60c-4b63-a6aa-2055d4d9d88e com.example.DiagnosticsWorker 4 RUNNING com.example.DiagnosticsWorker

Мы также добавили правила Lint, которые помечают распространенные ошибки при использовании WorkManager, тем самым помогая вам избежать их. Другие обновления API включают в себя: поддержку настройки и наблюдения за промежуточным прогрессом для воркеров, улучшения API-запросов для текущих воркеров и улучшения внутреннего планировщика, используемого для их запуска.

Бенчмарк

Примерные трассировки в Android Studio

Новая альфа-версия библиотеки Benchmark интегрируется с профилированием CPU, так что вы можете профилировать свои бенчмарки, а затем просматривать метод или выборочные трассировки прямо в Android Studio. Мы также добавили поддержку отслеживания распределения памяти, чтобы вы могли оптимизировать время, затрачиваемое на выделение и уменьшить нагрузку от сбора мусора.

Разрешения

Чтобы упростить работу с разрешениями, мы ввели новые API ActivityResult. Эти API упрощают запрос разрешений, заменяя requestPermissions контрактом RequestPermission, а также предоставляют типобезопасные контракты для общих целей, таких как фотографирование или запрос пользователю открыть документ.

Games SDK

Android Games SDK, запущенный ранее в этом году, теперь также является частью Jetpack и доступен в репозитории Google Maven. В настоящее время SDK предлагает Frame Pacing API (API для настройки кадра) и Android Performance Tuner (тюнер производительности Android). Узнайте больше о пакете Games SDK из официальной документации.

CameraX

Существует множество вариаций камер на разных устройствах Android, CameraX работает на 90% из них. С тех пор как CameraX вышла в бета-версию в феврале прошлого года, мы сосредоточились на ее надежности, чтобы обеспечить наилучшее поведение API для широкого спектра устройств. Наша тестовая лаборатория CameraX запускает автоматизированный набор тестов на типах устройств, представляющих более 400 миллионов активных устройств в использовании.

Последняя версия CameraX вносит улучшения в виджет PreviewView. Теперь он надежно обрабатывает взаимодействие с жизненным циклом вашего приложения и просмотр пейджеров. Он также оптимизирован для прозрачного использования SurfaceView под капотом на устройствах, которые выиграют от повышения его производительности. Это приводит к уменьшению буферизации и повышению энергоэффективности.

Ознакомьтесь с обширной документацией CameraX и примерами, чтобы узнать больше.

Безопасность

Библиотека безопасности Jetpack предоставляет безопасные и простые в использовании файловые крипто-абстракции, такие как EncryptedFile и EncryptedSharedPreferences. Jetpack Security использует преимущества Android Keystore, которое обеспечивает аппаратную поддержку хранения и эксплуатационную безопасность. Jetpack Security теперь находится на стадии Release Сandidate 2 для Marshmallow+ и 1.1.0 alpha для поддержки Lollipop+.

AppCompat

AppCompat обеспечивает адаптацию для различных элементов UI, начиная с темы Material, заканчивая виджетами, такими как Toolbar и темная тема. В последних версиях мы добавили правила Lint, которые позволяют вам лучше понять, какие атрибуты приходят из AppCompat, а какие из фреймворка, и убедиться, что вы используете правильный. Мы также внесли существенные улучшения стабильности в реализацию темной темы AppCompat.

Webkit

Библиотека Webkit Jetpack добавляет новый API в версии 1.2.0, чтобы принудительно использовать темный режим для своего контента. Когда этот API включен, WebView будет отображать сайты в темной теме там, где она поддерживается. При отсутствии поддержки API инвертирует определенные цвета.

Jetpack Compose — новый инструментарий UI Android

Jetpack Compose, новый современный инструментарий UI Android, теперь находится в Developer Preview 2. Этот релиз добавляет множество новых возможностей: совместимость View, более подходящие по стилю Material-компоненты UI, поддержка темной темы, новое тестирование UI и API анимации, базовая поддержка ConstraintLayout, совершенствование управления состоянием, интеграции с наблюдаемыми потоками и поддержка RTL. Превью Android Studio теперь могут быть интерактивными, а также было сделано много улучшений в компиляторе.

Узнайте больше обо всех обновлениях из раздела What’s new in Compose, а затем попробуйте его и дайте нам обратную связь.

Это был краткий обзор всех обновлений Jetpack за последние несколько месяцев. Имея в наличии более 90 библиотек, мы знаем, что может быть трудно найти нужную. Чтобы исправить это, мы переработали веб-страницу Jetpack и добавили, среди прочего, удобный выбор API, чтобы быстро перейти от проблемы, которую вы имеете, к библиотеке Jetpack, которая может ее решить.

Чтобы узнать больше о библиотеках Jetpack, следите за новыми видео, постами в блогах и кодовыми таблицами, выходящими в Jetpack week из 11 недель Android.

Читайте также:


Перевод статьи Florina Muntenescu: What’s new in Jetpack