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, в котором объясняется, почему у него именно такое значение
This media is not supported in your browser
VIEW IN TELEGRAM
Appyx – новый фреймворк для навигации от Bumble
Ключевая идея фреймворка – разделение всего приложения на ноды, навигация между которыми происхожит путем перемещения по дереву всех нод. Каждая нода включает в себя и UI, и бизнес-логику. Фреймворк из коробки дает историю переходов, state restoration и поддержку Jetpack Compose Transitions.
Ключевая идея фреймворка – разделение всего приложения на ноды, навигация между которыми происхожит путем перемещения по дереву всех нод. Каждая нода включает в себя и UI, и бизнес-логику. Фреймворк из коробки дает историю переходов, state restoration и поддержку Jetpack Compose Transitions.
📆Каждый день я стараюсь публиковать хотя бы один классный и полезный материал про Android разработку. За месяц их набегает несколько десятков, и ориентироваться в них не всегда легко. Чтобы облегчить вам задачу, я периодически публикую дайджест самых популярных постов, разбитых на категории.
📰Новости Kotlin
Новая инкременталка в Kotlin 1.7.0
Расширенные билд репорты в Kotlin 1.7.0
🧱Архитектура и перфоманс
Полная история рефакторинга Яндекс.Музыки
Как строить архитектуру приложений с шарингом кода с КММ
Год в продакшне с КММ и 70% реюзом кода
Оптимизация перфоманса разных этапов сетевого запроса
🎁Прочее
Как упростить рутинные задачи в Android Studio
Сайт с актуальными версиями и совместимостью зависимостей Compose
Собеседование на Андроид-разработчика: Антон Дудаков и Артем Зиннатуллин
Советы по дебагу кода
🕵️♀️Кстати, у меня есть еще один канал, на который стоит подписаться тем, кто хочет расти в управление командой – TechLead Good Reads. Держите несколько интересных материалов оттуда на закуску!
Как устроиться тимлидом в европейскую компанию
Как решать конфликты дизайнеров и разработчиков
Как рассказывать про свой опыт работы с помощью методики STAR
Если дайджест вам понравился – ставьте ❤️, 👍 и 🔥. Благодаря этому я пойму, что собирал его не зря! А если у вас будут конкретные предложения по его улучшению – смело пишите в комментарии!
#digest
📰Новости Kotlin
Новая инкременталка в Kotlin 1.7.0
Расширенные билд репорты в Kotlin 1.7.0
🧱Архитектура и перфоманс
Полная история рефакторинга Яндекс.Музыки
Как строить архитектуру приложений с шарингом кода с КММ
Год в продакшне с КММ и 70% реюзом кода
Оптимизация перфоманса разных этапов сетевого запроса
🎁Прочее
Как упростить рутинные задачи в Android Studio
Сайт с актуальными версиями и совместимостью зависимостей Compose
Собеседование на Андроид-разработчика: Антон Дудаков и Артем Зиннатуллин
Советы по дебагу кода
🕵️♀️Кстати, у меня есть еще один канал, на который стоит подписаться тем, кто хочет расти в управление командой – TechLead Good Reads. Держите несколько интересных материалов оттуда на закуску!
Как устроиться тимлидом в европейскую компанию
Как решать конфликты дизайнеров и разработчиков
Как рассказывать про свой опыт работы с помощью методики STAR
Если дайджест вам понравился – ставьте ❤️, 👍 и 🔥. Благодаря этому я пойму, что собирал его не зря! А если у вас будут конкретные предложения по его улучшению – смело пишите в комментарии!
#digest
Telegram
Android Good Reads
Новая инкрементальная компиляция в Kotlin
В Kotlin 1.7.0 появилась поддержка нового механизма инкрементальной компиляции, который работает существенно лучше прежнего. Для разных сценариев бенчмарки показывают улучшения от 26 до 96%. В статье детально разбирается…
В Kotlin 1.7.0 появилась поддержка нового механизма инкрементальной компиляции, который работает существенно лучше прежнего. Для разных сценариев бенчмарки показывают улучшения от 26 до 96%. В статье детально разбирается…
Разбор библиотеки Mosaic
Mosaic – очень подходящий пример, чтобы разобраться, как писать свои библиотеки поверх compose-runtime и compose-compiler. В случае Mosaic это нужно для отображения CLI UI, но в вашем случае может пригодиться для решения любой задачи по управлению состоянием, которое можно описать деревом нод.
- Типы нод, их параметры и имплементация
- Составление нод в дерево
- Управление рекомпозицией
- Связь нод и конкретного UI элемента
Mosaic – очень подходящий пример, чтобы разобраться, как писать свои библиотеки поверх compose-runtime и compose-compiler. В случае Mosaic это нужно для отображения CLI UI, но в вашем случае может пригодиться для решения любой задачи по управлению состоянием, которое можно описать деревом нод.
- Типы нод, их параметры и имплементация
- Составление нод в дерево
- Управление рекомпозицией
- Связь нод и конкретного UI элемента
Predictive back gestures
Чтобы помочь пользователям видеть заранее, куда их приведет свайп «назад», в Android появится новая фича – predictive back gesture. Еще до завершения свайпа пользователь будет видеть, на какой конкретно экран этот жест его приведет.
Фича не будет доступна пользователям в Android 13, но в Beta 4 можно ее попробовать, включив соответствующий флаг. Почитайте анонс, чтобы посмотреть на изменения в API, которые вам скоро надо будет заадоптить.
Чтобы помочь пользователям видеть заранее, куда их приведет свайп «назад», в Android появится новая фича – predictive back gesture. Еще до завершения свайпа пользователь будет видеть, на какой конкретно экран этот жест его приведет.
Фича не будет доступна пользователям в Android 13, но в Beta 4 можно ее попробовать, включив соответствующий флаг. Почитайте анонс, чтобы посмотреть на изменения в API, которые вам скоро надо будет заадоптить.
Android Developers Blog
Prepare your app to support predictive back gestures
Posted by Jason Tang, Product Management, Diego Zuluaga, Developer Relations, and Michael Mauzy, Developer Documentation Since we...
В androidx завезли поддержку мультиплатформы
В сорцах androidx.collection и datastore появились коммиты, добавляющие поддержку iOS и macOS таргетов.
В сорцах androidx.collection и datastore появились коммиты, добавляющие поддержку iOS и macOS таргетов.
Релиз Jetpack Compose 1.2
- Новые API для работы с Grid вышли из Experimental и стали стабильными
- WindowInsets для определения разных отступов на девайсе
- Поддержка nested scroll из коробки
- Easing curves для анимаций
- Новые экспериментальные фичи: LazyLayout, загружаемые шрифты, много фич по работе с текстом
А кроме этого, стал стабильным и Compose for Wear OS 1.0.
- Новые API для работы с Grid вышли из Experimental и стали стабильными
- WindowInsets для определения разных отступов на девайсе
- Поддержка nested scroll из коробки
- Easing curves для анимаций
- Новые экспериментальные фичи: LazyLayout, загружаемые шрифты, много фич по работе с текстом
А кроме этого, стал стабильным и Compose for Wear OS 1.0.
Обновился роадмап разработки Compose
Основной фокус следующего релиза будет на:
🏎 Перфомансе
🧐 Поддержке advanced кейсов
🎨 Компонентах из Material 3
🛠 Улучшении тулинга, в том числе Preview и Live Edit
Еще из интересного в роадмапе:
- Стабилизация Paging Compose APIs
- Transition animations в Navigation
- Улучшения обработки эксепшнов на уровне compose-runtime
Основной фокус следующего релиза будет на:
🏎 Перфомансе
🧐 Поддержке advanced кейсов
🎨 Компонентах из Material 3
🛠 Улучшении тулинга, в том числе Preview и Live Edit
Еще из интересного в роадмапе:
- Стабилизация Paging Compose APIs
- Transition animations в Navigation
- Улучшения обработки эксепшнов на уровне compose-runtime
Android Developers
Jetpack Compose Roadmap | Android Developers
Первые шаги с Compose в Headhunter
Команда HH поделилась историей того, как они принимали решение затаскивать Compose в свое приложение, проводили первые эксперименты и решали возникающие проблемы.
Команда HH поделилась историей того, как они принимали решение затаскивать Compose в свое приложение, проводили первые эксперименты и решали возникающие проблемы.
Видеокурс по корутинам
Кирилл Розов закончил основную часть своего бесплатного видеокурса по корутинам. Самое время его наконец посмотреть! Программа курса:
- Особенности корутин
- CoroutineContext
- Жизненный цикл корутин и structured concurrency
- Обработка ошибок
- Каналы
- Синхронизация между корутинами
- Flow
- Особенности в Android
Кирилл Розов закончил основную часть своего бесплатного видеокурса по корутинам. Самое время его наконец посмотреть! Программа курса:
- Особенности корутин
- CoroutineContext
- Жизненный цикл корутин и structured concurrency
- Обработка ошибок
- Каналы
- Синхронизация между корутинами
- Flow
- Особенности в Android
YouTube
Курс Kotlin Coroutines
Авторский курс Кирилл Розова по Kotlin Coroutines для Android разработчиков
Обновление dependency-analysis-android-gradle-plugin
Dependency Analysis Plugin – очень полезная штука, которая позволяет детектить неиспользуемые зависимости, транзитивные зависимости, ненужные плагины и неправильную конфигурацию зависимостей. В версии 1.11.0 появилось несколько новых фичей:
- Таска fixDependencies, которая автоматически применяет все предлагаемые плагином исправления к вашим билд-скриптам.
- Более детальное объяснение предлагаемых исправлений по структуре модулей.
Если вы хотите узнать про плагин больше, вот релевантные статьи:
- The proper care and feeding of your Gradle build
- Dependency Analysis Gradle Plugin: Using bytecode analysis to find unused dependencies
- Dependency Analysis Gradle Plugin: What’s an ABI
- Reducing my Gradle plugin’s impact on configuration time: A journey
Dependency Analysis Plugin – очень полезная штука, которая позволяет детектить неиспользуемые зависимости, транзитивные зависимости, ненужные плагины и неправильную конфигурацию зависимостей. В версии 1.11.0 появилось несколько новых фичей:
- Таска fixDependencies, которая автоматически применяет все предлагаемые плагином исправления к вашим билд-скриптам.
- Более детальное объяснение предлагаемых исправлений по структуре модулей.
Если вы хотите узнать про плагин больше, вот релевантные статьи:
- The proper care and feeding of your Gradle build
- Dependency Analysis Gradle Plugin: Using bytecode analysis to find unused dependencies
- Dependency Analysis Gradle Plugin: What’s an ABI
- Reducing my Gradle plugin’s impact on configuration time: A journey