Полезные советы для дебага
- Перепроверяйте то, что говорят другие, даже если они очень уверены в советах
- Пытайтесь воспроизвести баг в маленьких и простых семплах, а не только в вашем продакшн коде
- Учитесь правильно писать просьбы о помощи
- Если столкнулись с проблемой, откатитесь на версию, где ее не было, и начинайте постепенно менять код, приближая его к сломанному состоянию
- Перепроверяйте то, что говорят другие, даже если они очень уверены в советах
- Пытайтесь воспроизвести баг в маленьких и простых семплах, а не только в вашем продакшн коде
- Учитесь правильно писать просьбы о помощи
- Если столкнулись с проблемой, откатитесь на версию, где ее не было, и начинайте постепенно менять код, приближая его к сломанному состоянию
Jetpack Compose Accessibility: Semantics
- Почему в Compose есть два дерева – composition и semantics
- Из чего состоит семантическое дерево
- Какие семантические свойства выводятся сами, а какие надо задавать самостоятельно
- Почему в Compose есть два дерева – composition и semantics
- Из чего состоит семантическое дерево
- Какие семантические свойства выводятся сами, а какие надо задавать самостоятельно
Compose Image на стероидах
Коллекция Composable и различных хелперов, которые прокачивают работу с ImageBitmap: отображение, манипулирование, изменение масштаба, зум, обрезание.
Коллекция Composable и различных хелперов, которые прокачивают работу с ImageBitmap: отображение, манипулирование, изменение масштаба, зум, обрезание.
Создание своей дизайн-системы на Compose
Google предоставляет много готовых Compose компонентов, поддерживающих Material UI. Но их недостаточно, если у продукта есть свой дизайн-язык, и его требуется поддержать. По ссылке вы найдете запись, слайды и дополнительные ссылки отличного доклада с недавнего Droidcon.
Google предоставляет много готовых Compose компонентов, поддерживающих Material UI. Но их недостаточно, если у продукта есть свой дизайн-язык, и его требуется поддержать. По ссылке вы найдете запись, слайды и дополнительные ссылки отличного доклада с недавнего Droidcon.
Год в продакшне с КММ и 70% реюза кода
- Кейс компании с 24 разработчиками, 2.5 миллионом MAU, 70% переиспользования кода и 99.75% крешфри
- Хранение общего кода в отдельном репозитории
- Использование интерфейсов вместо expect/actual
- Работа с крешами и уменьшение их количества в Kotlin/Native коде
- Кейс компании с 24 разработчиками, 2.5 миллионом MAU, 70% переиспользования кода и 99.75% крешфри
- Хранение общего кода в отдельном репозитории
- Использование интерфейсов вместо expect/actual
- Работа с крешами и уменьшение их количества в Kotlin/Native коде
Навигация в мультимодульном приложении на диплинках
- Приложение без Compose, с фиче-модулями и Activity вместо фрагментов
- Реализация обработки диплинков и навигации в нужный модуль
- Приложение без Compose, с фиче-модулями и Activity вместо фрагментов
- Реализация обработки диплинков и навигации в нужный модуль
Подкаст про Proguard с его разработчиком
- Как Proguard работает под капотом
- Proguard vs R8
- Runtime оптимизации в Proguard
- Как Proguard работает под капотом
- Proguard vs R8
- Runtime оптимизации в Proguard
Обновленные рекомендации по использованию Compose в RecyclerView
Начиная с
Начиная с
RecyclerView 1.3.0-alpha02
и Compose UI 1.2.0-beta02
, Composables больше не уничтожаются при выходе за границы экрана. Вместо этого они сохраняются и переиспользуются. Благодаря такому подходу исчез большой перфоманс-оверхед из-за необходимости постоянно пересоздавать composables.DNS-over-HTTPS/3 включен в Android 11 и выше
Большинство сетевых соединений начинаются с запроса к DNS. Исторически сложилось, что эти запросы не шифровались. Начиная с Android 9, Google выкатил фичу DNS-over-TLS, которая закрывает эту проблему, но порождает другие:
- Если первый запрос к серверу резолвится долго, все последующие ждут результата этого резолва, из-за чего общая производительность падает.
- При переходе из сотовой сети в сеть, что происходит при движении довольно часто, соединение рвется и его нужно восстанавливать с нуля, что тоже влияет на перфоманс.
Google вот только что выкатили обновление для всех устройств, начиная с Android 11, с новой фичей – DNS-over-HTTP/3. Она решает все перечисленные проблемы, а в нестабильных сетях работает даже лучше, чем оригинальный DNS. Поддержка протокола уже есть у нескольких ключевых DNS сервисов – Cloudflare и Google DNS.
Короче говоря, если хотите улучшить производительность сети в вашем проекте, проверьте, что ваш DNS сервис поддерживает этот протокол.
Большинство сетевых соединений начинаются с запроса к DNS. Исторически сложилось, что эти запросы не шифровались. Начиная с Android 9, Google выкатил фичу DNS-over-TLS, которая закрывает эту проблему, но порождает другие:
- Если первый запрос к серверу резолвится долго, все последующие ждут результата этого резолва, из-за чего общая производительность падает.
- При переходе из сотовой сети в сеть, что происходит при движении довольно часто, соединение рвется и его нужно восстанавливать с нуля, что тоже влияет на перфоманс.
Google вот только что выкатили обновление для всех устройств, начиная с Android 11, с новой фичей – DNS-over-HTTP/3. Она решает все перечисленные проблемы, а в нестабильных сетях работает даже лучше, чем оригинальный DNS. Поддержка протокола уже есть у нескольких ключевых DNS сервисов – Cloudflare и Google DNS.
Короче говоря, если хотите улучшить производительность сети в вашем проекте, проверьте, что ваш DNS сервис поддерживает этот протокол.
Выпуск Подлодки про протоколы и сети
Если вы не очень шарите в сетях и протоколах, но хотели бы разобраться – мы сравнительно недавно записали выпуск Подлодки из двух частей, где на пальцах разобрали, как работают современные сети, из каких этапов состоит сетевой запрос, и в целом как работает интернет.
- Часть 1
- Часть 2
Если вы не очень шарите в сетях и протоколах, но хотели бы разобраться – мы сравнительно недавно записали выпуск Подлодки из двух частей, где на пальцах разобрали, как работают современные сети, из каких этапов состоит сетевой запрос, и в целом как работает интернет.
- Часть 1
- Часть 2
podlodka.io
Podlodka #239 – Сети, часть 1: Интернет
Замахнулись на необъятное и обсудили компьютерные сети! Одного выпуска для такой тему явно мало, поэтому пока мы сфокусировались на интернете, и подробно изучили приключения сигнала на пути от пользователя к целевому сервису. В гостях у нас Тёма Гавриченков…
Positional memoization in Jetpack Compose
Простое объяснение того, как Compose кеширует информацию о Composable в дереве элементов. Понимание механики поможет вам не совершать ошибок, из-за которых дерево будет пересчитываться чаще, чем действительно нужно.
А если вы захотите более подробного разбора, обязательно посмотрите старую статью от Leland Richardson, одного из авторов фреймворка.
Простое объяснение того, как Compose кеширует информацию о Composable в дереве элементов. Понимание механики поможет вам не совершать ошибок, из-за которых дерево будет пересчитываться чаще, чем действительно нужно.
А если вы захотите более подробного разбора, обязательно посмотрите старую статью от Leland Richardson, одного из авторов фреймворка.
Подборка репозиториев с проектами на Compose
Твиттер-тред с 20 проектами или примерами кода на Jetpack Compose. Среди них:
- Примеры анимаций
- Чистая архитектура и Compose
- NotyKT – приложение-заметочник и его бэкенд
Твиттер-тред с 20 проектами или примерами кода на Jetpack Compose. Среди них:
- Примеры анимаций
- Чистая архитектура и Compose
- NotyKT – приложение-заметочник и его бэкенд
Twitter
20 Github Repositories for Android Developer that will teach you Jetpack Compose 💯
A Long Thread 🧵👇
A Long Thread 🧵👇
Как сохранить стейт UI в Compose при смене ориентации
Разбор двух подходов к сохранению UI стейта при смене ориентации или пересоздании Activity.
- Сохранение объектов с помощью kotlin-parcelable
- Реализация
Разбор двух подходов к сохранению UI стейта при смене ориентации или пересоздании Activity.
- Сохранение объектов с помощью kotlin-parcelable
- Реализация
mapSaver`/`listSaver
функции для тех случаев, когда использование Parcelable не подходитMedium
How To Retain Your App’s UI State Across Configuration Changes In Jetpack Compose
No longer lose your Android app’s state on process recreation
Коллекция CLI-команд для обработки изображений
В процессе работы часто приходится что-то делать с изображениями: ресайзить, мерджить или конвертировать между форматами. По ссылке – полезный гайд по самым частым консольным командам, которые вам могут помочь.
В процессе работы часто приходится что-то делать с изображениями: ресайзить, мерджить или конвертировать между форматами. По ссылке – полезный гайд по самым частым консольным командам, которые вам могут помочь.
kau.sh
Manipulating images & PDFs using CLI commands · Kaushik Gopal's Site
A bunch of useful cli commands for converting & editing images & PDF files
Разбор приложения Now in Android
Недавно команда Android зарелизила новое семпловое приложение – Now in Android. Его задача – показывать на примере все рекомендуемые подходы к архитектуре, UI и перфомансу. Если у вас пока не дошли руки, чтобы склонировать проект и разобраться с ним самостоятельно, статья даст хорошее понимание, как конкретно спроектирован каждый слой проекта и какие зависимости используются.
Недавно команда Android зарелизила новое семпловое приложение – Now in Android. Его задача – показывать на примере все рекомендуемые подходы к архитектуре, UI и перфомансу. Если у вас пока не дошли руки, чтобы склонировать проект и разобраться с ним самостоятельно, статья даст хорошее понимание, как конкретно спроектирован каждый слой проекта и какие зависимости используются.
Включите Gradle configuration cache в своем проекте
Если вы еще не включили configuration cache, самое время это сделать. В твиттере делятся результатами – в проекте со 135 subprojects использование кеша сократило время сборки на 61-98%, с четырех минут до десятков секунд.
Если вы еще не включили configuration cache, самое время это сделать. В твиттере делятся результатами – в проекте со 135 subprojects использование кеша сократило время сборки на 61-98%, с четырех минут до десятков секунд.
Twitter
on a gradle android project with 135 subprojects, use of configuration caching made the build 61-98% faster (~4min to ~seconds). This is based on real-world observational data from our users via Gradle Enterprise, not benchmarking.
Интерактивный гайд по работе со стейтом с помощью Flow
Страница со статьей собрана на Compose for Web. Благодаря этому, можно не только смотреть на примеры кода, но и на ходу играть со стейтом и смотреть, как обрабатываются его изменения. Автор разбирает:
- Как реализовать UDF с помощью Flows
- Как прокидывать действия пользователя до стейта
- Как мерджить изменения в стейте
- Как решать конфликты при изменениях
Страница со статьей собрана на Compose for Web. Благодаря этому, можно не только смотреть на примеры кода, но и на ходу играть со стейтом и смотреть, как обрабатываются его изменения. Автор разбирает:
- Как реализовать UDF с помощью Flows
- Как прокидывать действия пользователя до стейта
- Как мерджить изменения в стейте
- Как решать конфликты при изменениях
Вышел Detekt-1.21.0
- Добавлены 6 новых правил: NullableBooleanCheck, CouldBeSequence, UnnecessaryBackticks, ForbiddenSuppress, MaxChainedCallsOnSameLine, CascadingCallWrapping
- Добавлена поддержка маркдауна для отчетов
- В конфиге для каждого свойства теперь можно указывать reason, в котором объясняется, почему у него именно такое значение
- Добавлены 6 новых правил: NullableBooleanCheck, CouldBeSequence, UnnecessaryBackticks, ForbiddenSuppress, MaxChainedCallsOnSameLine, CascadingCallWrapping
- Добавлена поддержка маркдауна для отчетов
- В конфиге для каждого свойства теперь можно указывать reason, в котором объясняется, почему у него именно такое значение