Привет. Меня зовут Кирилл Розов и вы если вы интересуетесь разработкой по Android, то скорее всего слышали о Telegram канале "Android Broadcast", с ежедневными новостями для Android разработчиков, и одноимённом YouTube канале. Этот пост является текстовой расшифровкой нового видео на канале


Привет! Очередная неделя подошла к концу, и я собрал лучшие новости специально для вас! Вышла большая порция новых стабильных библиотек Android Jetpack, IDEA теперь может запускаться на CI, а в конце вы узнаете как выиграть билет на Mobius! Я Кирилл Розов, это канал Android Broadcast. Давайте разбираться!

AndroidX Activity 1.2.0 | Activity Result API

Вышла библиотека Activity 1.2.0 в которой появилось Activity Result API, возможность получить Context до вызова onCreate(), поддержка ViewTree, а также backport метода reportFullyDrawn().

Activity Result API - это новое API, которое приходит на замену перегрузке метода onActivityResult() и делает его более удобным. Теперь вам нужно просто зарегистрироваться с указанием контракта и callback для получения объекта ActivityResultContract, который вы можете вызвать для получения результата из любой Activity. Самые распространенные контракты такие как получение картинки или выбор файла уже реализованы в библиотеки, но вы легко можете добавить свой. Также важный аспект нового API то, что оно упрощает работу с получением разрешений, так как их механизм основан на onActivityResult().

Следующая новинка - возможность получить Context до вызова onCreate(), подписавшись на соответствующее событие. Конечно есть вариант для Coroutine без callback-a.

Поддержка ViewTree - это значит что ComponentActivity теперь работает со всеми новыми API из SavedState и Lifecycle, о которых я расскажу позже.

Fragment 1.3.0

Вышла новая библиотека Fragment 1.3.0 в которой произошел большой рефакторинг под капотом, добавлена интеграция с новыми API, пометили как deprecated множество API, а также представили новый механизм для коммуникации между Fragment.

Самое важное, что произошло в новой версии - это новый менеджер состояния Fragment-ов, который исправил множество странностей в поведении, а также заложил фундамент для поддержки множества back stack-ов.

Интеграция Activity Result API позволила упростить код внутри, а также исправила несколько проблем, связанных с request кодами и вызовами callback-ов о получение permission.

Если вы пробовали когда передавать результат между Fragment с помощью setTargetFragment - это была еще та задача. Не место ему добавили новое API - Fragment Result API, которое позволяет через FragmentManager обмениваться данными между Fragment-ами через специальные Callback.

"Пора Fragment меняться и становиться проще" - видно так решили в Google и стали помечать deprecated множество API. setRetainInstance() уходит, передавая свои полномочия ViewModel. FragmentPagerAdapter из ViewPager 1 теперь тоже deprecated и как замена предлагается использовать вторую версию библиотеки, которую разработчики ругают и зачастую все также пользуются первой. Но самый интересный deprecation произошел с методом onAttachFragment() в Activity и Fragment. Ему на смену приходит FragmentOnAttachListener, который более гибкий и позволяет делегировать вызов onAttachFragment().

Lifecycle 2.3.0

Вышла новая версия Lifecycle 2.3.0 добавила возможность сохранять новые типы в SavedStateHandle, изменилось поведение Lifecycle, а также добавили новое ViewTree API.

В SavedStateHandle появилась lazy сериализация, т.е. теперь можно задать setSavedStateProvider() для заданного ключа, чтобы сериализовать его лениво, что позволяет сохранять любой тип.

Изменения также затронули Lifecycle: теперь DESTROYED - это терминальное состояние, и после него никаких вызовов происходить не будет. Также теперь все методы Lifecycle вызываются строго на главном потоке, а в противном случаем будет креш. Помимо прочего добавили нового API, чтобы упростить тестирование

Большая новинка ViewTree API, которое позволяет получить LifecycleOwner или ViewModelStoreOwner для заданного View. Аналогичное API добавили для SavedStateRegistry в библиотеки savedstate 1.1.0

Kotlin Symbol Processing вышел в Альфу

Kotlin Symbol Processing (KSP) перешёл в альфу и начата работа по его адаптации в Room

Новость хорошая так как цель KSP - заменить kapt, который здорово тормозит сборку проектов и не всегда позволяет генерировать код инкрементально. Новое решение от Google будет сразу генерировать Kotlin код без магии, которая необходима, чтобы завести Java apt в Kotlin. По предварительным данным скорость работы KSP в 2 раза быстрее kapt. Похоже свет в конце туннеля есть. Будем ждать адаптации KSP в библиотеках

Запуск анализа кода IDEA на CI

Статически анализ кода из IDEA теперь можно будет запустить без GUI на CI

Новый проект JetBrains - Qodana, который позволяет запустить статически проверки кода на вашем CI и генерировать отчеты. Qodana состоит из 2 частей: IDEA без UI для запуска проверок и утилита для создания Web UI с отчетом. Теперь анализ можно добавить в ваш pipeline. Сейчас поддерживается интеграция в Teamcity, через Docker образ и есть GitHub Action и Application. Вы также можете посмотреть на анализ открытых проект на публичном TeamCity. В будущем количество поддерживаемых языков и способов интеграции будет увеличиваться. На стадии EAP проект бесплатен, но что будет с выходом первого релиза непонятно.

Core App Quality

На сайте developers.android.com появился новый раздел "App Quality", содержащий ключевые аспекты качественного Android приложения.

В новом разделе вы сможете найти каким критериям должно соответствовать хорошее приложение, а главное как это добиться. Помимо прочего вы найдете checklist в котором представлены все тренды экосистемы Android. Сейчас представлены пять категорий:

  • визуальный опыт

  • функциональность

  • производительность и стабильность

  • приватность и безопасность

  • Соответствие политикам Google Play

Также вы найдете рекомендации по организации тестирования для проверки этих требований в своих приложениях.

Модуляризация 2021

Вышла серия статей от разработчиков Kaspersky в которой они рассказывают о своём опыте современной модуляризации android приложения и инициализации feature модулей сразу, так и отложенно, когда feature понадобится пользователю. Всем кто задумывался над модуляризацией или хочет ее оптимизировать обязательно к прочтению.


Условия розыгрыша билета на Mobius

  1. Подписаться на YouTube канал "Android Broadcast"

  2. Подписаться на Telegram канал "Android Broadcast"

  3. Подписаться на Telegram канал "Kotlin Broadcast"

  4. Оставить комментарий под роликом с указанием своего никнейма в Telegram (не номер телефона!!!)

  5. Ждать розыгрыша, который пройдет в марте