Android Live 🤖
5.25K subscribers
53 photos
2 videos
808 links
Самые свежие новости, новинки и тренды Android от практикующего разработчика.


Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog

Рекламу не размещаю
Download Telegram
​​Jetpack Glance Alpha для виджетов
#jetpack #compose

Наверняка вы знаете о том, что в Android 12 обновили виджеты, сделав их более используемыми и красивыми.
По статистике Google, 84% пользователей используют хотя бы один виджет. ☝🏼
Однако, на мой взгляд, если убрать из этой выборки часы и погоду, то останется совсем небольшой процент людей, которые устанавливают какие-то другие виджеты.

Но ребята из Google пытаются улучшить эту статистику и анонсировали новый способ создания виджетов — Jetpack Glance.
По сути, теперь мы можем писать виджеты в декларативном стиле с использованием Jetpack Compose. Пока что всё в aplpha, и обещают добавить ещё больше элементов для создания красивых виджетов. Чуть больше деталей тут.

Звучит интересно, посмотрим, получится ли воскресить виджеты на Android. Я как-то пока не сильно в это верю: мне кажется, что виджеты не добавляют в приложение именно потому что ими почти не пользуются. А что думаете вы?
👍2
​​Jetpack Compose в существующий проект
#jetpack #compose

Статья, где автор делится своим опытом внедрения Jetpack Compose в текущий проект.
Для начала этого пути, он выбрал смену одной из главных кнопок в проекте и заменил её на Composable-функцию.

Думаю, что статья будет полезна новичкам в Compose, которые только-только стоят на пути изучения этой крутой технологии и внедрения её в свои проекты.
👍3
​​Jetnews на каждом экране
#jetpack #compose

Интересная статья, которая будет полезна всем, кто работает с Compose и хочет адаптировать своё приложение под разные размеры экрана.

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

В целом, адаптация приложения под большие экраны — не выглядит чем-то сильно сложным и критичным. Но если у вас есть отличный опыт, то делитесь в комментариях.
👍1
​​Rich Text в Jetpack Compose
#jetpack #compose

Тут подписчик подкинул классную статью, где довольно исчерпывающе описываются возможности для применения стилей текста в Jetpack Compose.

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

Автор рассказывает про множество свойств текста, использование TextStyle, добавление стилей через AnnotatedString.
👍3
​​Play Time with Jetpack Compose
#jetpack #compose

Тут команда Google делится интересным опытом перехода от старого подхода на xml на Jetpack Compose.

Думаю, что далеко не каждое приложение может похвастаться таким сроком жизни и количеством пользователей. Кодовая база приложения составляет больше 10 лет работы, и за это время накопилось огромное количество технического долга, который необходимо было заплатить.

Ребята решили переписать UI на Jetpack Compose, и у них получилось значительно уменьшить кодовую базу, примерно на 50%. Также ощутимо выросла продуктивность при написании кода и производительность всего приложения, в том числе анимаций.

Что ж, ещё один позитивный кейс в копилку успешного перехода на Compose, и очень здорово, что он становится всё более распространённым.
👍8
​​Как измерить производительность Compose?
#compose

Compose стремительно вливается в повседневную Android-разработку, постепенно вытесняя традиционные View. До недавнего времени было сложно понять, насколько производительными являются функции, написанные на Compose. Но с выходом последней версии 1.2.0 ситуация улучшилась, ведь добавились метрики для расчёта производительности Compose.

Очень подробная статья об использовании этих метрик написана тут, а тут мы коснёмся только нескольких моментов.

Итоговый отчёт работает в релизном билде и состоит из нескольких файлов:
• общая статистика по приложению;
• детальная статистика по каждой из функциий;
• csv-версия этой же статистики;
• информация о стабильности каждой из написанных функций.

Каждый раз мы получаем информацию о нескольких параметрах: Restartable, Skippable, Immutability & stability. Дальше, смотря на эти параметры, мы можем понять, что можно улучшить: например, если функция restartable, но не skippable, то стоит посмотреть, какие параметры являются входящими в эту функцию и почему компилятор считает некоторые из них unstable.

Пока что статистика выглядит не самой простой для понимания, но первый шаг сделан. Так что ожидаем больше статистики и более удобный вид для анализа тех данных, что у нас есть.
👍4
​​Material You в Jetpack Compose
#design #compose

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

Попалась любопытная статья, где автор применяет библиотеку Material Design 3 к своему небольшому приложению, написанному на Compose.
Тут можно подсмотреть, как лучше хранить цвета и ресурсы для тем в Compose, как лучше сделать динамические темы, да и то, как начать переезд на эту фичу в своём приложении.

Выглядит здорово, надеюсь на поддержку этой фичи в основных приложениях.
6👍3👎1
​​Parallax Effect в Jetpack Compose
#compose

Попалась красивая реализация эффекта параллакса, которая написана на Jetpack Compose.
Не уверен на 100%, что вам есть где использовать этот эффект в приложении, но любопытно посмотреть на саму реализацию. Тем более, на столь популярном в последнее время Compose.

@Composable элементы меняют своё положение на основе ориентации устройства и приходящих данных с SensorManager. Далее, создаётся DisposableEffect, который используется для репозиционирования Image.

Автор добавил немного модификаторов для тени и карточки. В итоге получился приятный и красивый эффект.
Чуть больше деталей реализации, ну и, конечно, примеры кода можно найти тут. 🤓
👍9👎1
​​Navigation в Jetpack Compose
#compose

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

Тут автор очень круто сравнивает текущие подходы к навигации и пытается подобрать идеальный вариант. В сравнение попали следующие библиотеки:

👉 Navigation-compose;
👉 Compose-navigation-reimagined;
👉 Voyager;
👉 Navigator-compose;
👉 Simple-stack-compose-integration;

У каждой из них он рассмотрел плюсы и минусы, в некоторых указал, как эти минусы разрешить.

🏆 В итоге, по мнению автора, победила библиотека Voyager, которая вот-вот выйдет в релизную версию.
👍6🔥3👎1
​​Spring & Fling анимации в Jetpack compose
#compose

Physics-based анимации — это тип анимаций, которые, по сравнению с обычными анимациями, дают более естественные и плавные эффекты.

В Android существует несколько разных типов подобных анимаций, и Jetpack Compose поддерживает некоторые из них.

Автор статьи рассказывает, как добавить Spring & Fling анимации в проект, сделав анимированной любую из написанных View.
5👎1
​​Screenshot tests для Compose
#compose

Тестирование при помощи скриншотов — довольно эффективный способ тестирования UI. При использовании Jetpack Compose у нас есть аннотации @Preview, которые, по сути и являются слоем для UI.

Есть библиотека Showkase, которая помогает преобразовать аннотированные методы в элементы UI для предварительного просмотра.
Автор статьи рассказывает о том, как он соединил эту либу с Screenshot testing library от Facebook.

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

🤓 В результате у автора получилось вынести тестирование UI при помощи скриншотов на CI. Если скриншоты отличаются от тех, что были получены в новом PR, то создаётся ветка, где показывается diff между двумя ветками.
Тут автор рассказывает, как можно интегрировать подобный подход в своём приложении.
👍13👎1🔥1
​​Lifecycle of Composables in Jetpack Compose
#compose #новичкам

Довольно подробный гайд о том, что из себя представляет Jetpack Compose. Будет сильно полезно новичкам, ну и, конечно, тем, кто не особо представляет, как фреимворк работает под капотом.

Тут и:
🔸 жизненный цикл composable-функции;
🔸 обновление одной composable-функции из другой;
🔸 логирование событий;
🔸 и о том, как корректно использовать рекомпозицию.

Ну и круто, что всё построено на одном примере, который вы вместе с автором можете построить. 👌🏻
Ссылка на туториал тут.
👍11🤔3
​​Дизайн система с Jetpack Compose
#compose

В своём текущем проекте думаем о добавлении дизайн системы, и мне попалась полезная статья, которая описывает, как сделать такую систему на Jetpack Compose.

Вообще, с ростом приложения дизайн система крайне важна: она помогает переиспользовать существующие компоненты и быстро находить несоответствия в текущем компоненте.

Кроме этого, есть ещё несколько преимуществ:
👉 общий язык между командой дизайнеров и разработчиков;
👉 единственный "источник истины" при вёрстке;
👉 изменения в нижнем слое мгновенно изменяют состояние всех остальных слоёв;
👉 расширяемость: все более сложные компоненты состоят из множества маленьких;

Рекомендую ознакомиться со статьёй, где автор подробно описывает, как должна выглядеть подобная система на Compose.

Поделитесь опытом: помогла ли вам дизайн-система улучшить процессы между командами. Или скиньте в комментариях ещё больше полезных статей с прикладным опытом для построения такой системы.
🔥8
​​InsetsX
#compose

Небольшая библиотека, которая позволяет вам шустро настраивать инсеты при использовании Compose Multiplatform для Android и iOS.

Выглядит очень круто, и работает по аналогии со стандартным плагином для Android (отличается только package-name).
Ну и помните, что Compose Multiplatform для iOS пока сырой, так что тащите осторожнее.
👍11💋2🤔1
Оптимизации Compose
#compose

Классная статья, в которой рассказывается о полезных оптимизациях для Compose.
Вполне возможно, что эти рекомендации помогут и вашему UI работать быстрее.

Тут и про оптимизацию пропусков в Composable-функциях, и про то, что делать при долгих вычислениях при рекомпозиции, а также куча ссылок о том, как писать свои Compose-layouts. Ну и для каждого кейса есть свой пример с кодом. 👌

Ссылка на статью тут.
🔥15👍6
Jetpack Glance для виджетов
#compose

Наверняка среди читателей есть разработчики, которые делали виджеты: там присутствует целый ряд ограничений, из-за чего нельзя использовать все варианты View. Да и в целом, создавать виджеты было не очень приятно.

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

Либа уже в статусе релиз-кандидата, так что самое время задуматься о том, чтобы создавать новые виджеты на ней. Можно начать с этих двух статей.
👍6🔥2👌1
HashMap для Jetpack Compose
#compose #performance

Интересная статья, где рассказывается про минусы стандартной HashMap в контектсте использования Jetpack Compose.

При использовании mutableMapOf() под капотом создаётся LinkedHashMap(), которая довольна хороша, но имеет недостаток: при каждом новом добавлении элемента создаётся LinkedHashMapEntry, из-за чего структура не очень memory-friendly.

Ну и сходу предлагается использовать другую структуру — ScatterMap, у которой подобных недостатков нет. В статье есть и замеры, и описывается главный недостаток этого подхода: структура хоть и map-based, но не наследуется от привычного нам Map, хотя и имеет подобные ему классы.

Стоит ли бежать заменять мапы на неё? Безусловно, нет: сам автор признаётся, что вам просто стоит иметь в виду, что такая структура существует и вы вспомните о ней, когда аллокация памяти будет очень критичным моментом.
🔥22🤔54👍4👎2
Ресурсы в Compose Multiplatform
#compose

Не секрет, что ни один из проектов не обходится без ресурсов, а управление ими становится только сложнее с ростом проекта. Ну и становится сложнее, когда проект написан на несколько платформ сразу.

Неплохая обзорная статья, где описываются основные изменения работы с ресурсами после свежего релиза Compose Multiplatform 1.6.0-beta01.

В целом, стало всё чуть удобнее, но буду рад, если поделитесь практическими примерами оптимизации ресурсов в подобных приложениях.
👍72🥱1
Coil 3.x
#kotlin #compose

Отличная новость — вышла новая версия Coil, которая теперь поддерживает Kotlin Multiplatform на Android, JVM, iOS, macOS, JavaScript и WASM! Конечно, с поддержкой Compose Multiplatform. 🔥

Изменений немало:
🔴можно выбрать библиотеку для работы с сетью: Ktor или OkHttp. Без добавления зависимости будет работать только загрузка локальных или статичных изображений.;
🔴поменялся пакет для библиотеки, теперь надо мигрировать на io.coil-kt.coil3, что, в целом, не сложно сделать;
🔴в мультиплатформе всё отлично: помимо работы с Compose, заявлена полная поддержка coil-svg, а coil-gif и coil-video обещают добавить чуть позже (пока только на Android);
🔴целый ряд небольших, но важных изменений.

Как вам обновление? Используете эту библиотеку?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍43👌1
Compose Multiplatform — в проде!
#compose

Отличная новость: Compose Multiplatform 1.8.0 вышел в релиз, и Compose для iOS теперь в stable!

Сам анонс тут, кратко что обещают:
🟢все основные API стабильны, глобальных ломающих изменений не планируется;
🟢Compose на iOS ощущается как нативный фреймворк: скроллы, навигация, шрифты — всё учитывается;
🟢с производительностью тоже всё в порядке, очень близок к SwiftUI;
🟢Compose Preview работает наравне с Compose Hot Reload;

Больше изменений тут.
Поздравляю команду JetBrains, теперь надо команду iOS уговорить попробовать новую технологию. 😄
А вы уже пробовали? Как впечатления?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥6🤔3