TGViewer
Channel Public Channel
Android Good Reads

Android Good Reads

@droidgr

Самые интересные статьи, видео и новости, связанные с Android разработкой. Не больше трёх материалов в день.

Размещение рекламы: @tanyasanovna
Subscribers
4.03K
Photos
420
Videos
17
Links
2.2K

Showing posts older than #2346 · Back to latest

Older Posts 20 shown
Post #2345 3.64K
Android Good Reads Тестируйте умнее, а не усерднее Google обновили документацию по тестированию приложений 👉 Акцент на продуктивности разработки. Пишем тесты пропорционально пирамиде тестирования, не переусердствуем с частотой запуска тестов. Все ради минимизации стоимости…
Какое то время назад я вам продвигал идею скриншот тестирования через новую библиотеку от гугла. К сожалению, очередная версия поломалась и не работает так стабильно, как мне бы хотелось на моем проекте.

Заменил я ее связкой Roborazzi (robolectric) + Compose Preview Scanner.

В чем идея:
Robotazzi в целом умеет в скриншот тестирование хорошо, но для этого надо писать тесты, а я не хочу! Я хочу лениво, у меня ведь много превьюшек моих компонентов в коде.

Compose Preview Scanner как раз и закрывает эту проблему, сканируя вашу androidMain/screenshotTest/commonMain (да! да! Поддерживает даже CMP) директорию на наличие превьюшек. В самих репозиториях исчерпывающий гайд, но я очень рекомендую посмотреть на примеры реализации

Про автоматизацию Roborazzi тестов почитать можно тут
  • 👍 7
  • 🔥 2
  • 😁 2
Post #2344 2.86K
Android Good Reads Про поддержку 16KB page Зачем? Девайсы с поддержкой 16 KB работают быстрее на 5-10%, а так же: 👉 Старт приложений быстрее (до 30% для некоторых приложений, 3.16% в среднем), 👉 Меньше расход батареи (на 4.56% меньше) 👉 Быстрее запуск камеры (4.48-6.60%) …
Доброе утро! Google начал рассылать письма счастья о необходимости поддержки 16kb page и дедлайне 1 ноября. Если у вас есть аккаунт разработчика - проверяйте состояния ваших приложений!

Более подробно писали вот тут: https://android-developers.googleblog.com/2025/05/prepare-play-apps-for-devices-with-16kb-page-size.html
  • ❤ 4
  • 😢 3
Post #2343 3.83K
Android Good Reads Rich Errors в Kotlin 2.4 Анонсировали на KotlinConf. На мой взгляд, классная обертка на замену старому-доброму try-catch. Какие возможные проблемы видите в этом?
Анонсированные Rich Errors все ближе

В статье о том как к этому подготовиться, ну а я предлагаю взглянуть на side-by-side пример:

Было

fun loadConfig(path: Path): Result<Config> =
runCatching { fileSystem.readBytes(path) }
.mapCatching { bytes -> parseConfig(bytes) }
.recover { e ->
if (e is NoSuchFileException) defaultConfig() else throw e
}

fun useConfig(path: Path) {
loadConfig(path)
.onSuccess { cfg -> startApp(cfg) }
.onFailure { e ->
when (e) {
is NoSuchFileException -> showMissingConfigWarning()
is ConfigFormatException -> showConfigParseError(e)
else -> showGenericError(e)
}
}
}


Стало

// Rich errors
// Define error variants (could be data objects/classes in your domain)
data object IoFailure
data class ParseFailure(val details: String)

fun loadConfig(path: Path): Config | IoFailure | ParseFailure

fun useConfigRich(path: Path) {
when (val r = loadConfig(path)) {
is Config -> startApp(r)
is IoFailure -> showMissingConfigWarning()
is ParseFailure -> showConfigParseErrorMessage(r.details)
}
}
  • 🔥 18
  • ❤ 4
  • 🥰 4
Post #2340 2.99K
Kotlin/Compose MP - Что будет дальше?

👉 Фокус на iOS/web. Очень ждем, особенно первое. Зависимости и сборка это боль
👉 Улучшения IDE для MP разработки. Новый плагин это большая беда. Много багов, сломали что работало. Надеюсь будет лучше
👉 Kotlin Web/Wasm хотят выпустить в бету
👉 Ну и как обычно. Сборка быстрее, конфигурирование проще в грядущих версиях

Следим!
The JetBrains Blog What’s Next for Kotlin Multiplatform and Compose Multiplatform – August 2025 Update - The JetBrains Blog Discover our priorities and the general direction for Kotlin Multiplatform and Compose Multiplatform over the next six to twelve months.
  • 👍 6
  • 🔥 5
  • ❤ 4
Post #2339 2.96K
Эволюция архитектур в Android

⬇️ Мономодуль. Весь код в 1 модуле, код не переиспользуется между приложениями
⬇️ Упрощенная модуляризация. Общая часть выносится в единый base модуль. Все остальные модули зависят от него.
⬇️ Полная модуляризация. Помимо общего kotlin/android модуля появляется data/domain/presentation модули и сложный менеджмент зависимостей меж фиче-модулями
⬇️ После того как вы обнаружили себя в миллионе модулей со временем сборки, стремящимся в бесконечность, - начинается объединение в фичегруппы и уменьшение количество модулей.

Подробнее про каждую внутри статьи
На какой стадии ваш проект по этой линейке?
  • 👍 8
  • ❤ 2
  • 🤔 2
Post #2338 3.48K
Вчера был релиз Kotlin 2.2.20-RC

👉 В основном упор на мультиплатформу. Минорные изменение и стабилизация
👉 Можно в экспериментальном режиме посмотреть фичи из 2.3.0

Перегрузка suspend в лямде

fun transform(block: () -> Int) {}
fun transform(block: suspend () -> Int) {}


return в expression bodies с explicit return types. На примере более очевидно. Больше примеров тут

fun returnInsideIf() = when {
else -> {
val result = if (someCondition()) return "" else "value"
result
}
}
  • ❤ 4
  • 👍 4
  • 🔥 2
Post #2336 3.1K
Очень специфичный кейс. Отправляем RecyclerView ивенты в родительский Compose.

Возможный кейс при миграции на compose и сильной атомарности компонентов. В целом важен только код внутри статьи, но идея заключается в композиции NestedScrollConnection и NestedScrollDispatcher
  • 🤯 3
  • 👍 2
Post #2335 4.04K
Нынче в Андроиде

👉 Canary версии обновлений для девайсов. На самой ранней стадии будем ловить все проблемы будущей операционки
👉 Продолжают вкладываться в Agentic AI внутри Android Studio. Могу дать только крайне негативный отзыв. Лучше бы вложились в Junie
👉 Еще разок о 16KB page size. Разбирались с вами вот тут
👉 Обновление для one-time product внутри Google Play Billing
👉 Грядущий изменения в разработки приложений под часы. Со следующего года буду введены ограничения на публикацию устаревших версий
👉 Google Play Игры теперь и на PC. Пример на основе Mecha BREAK.
Medium Now in Android #120 Canary Channel, Agentic AI in Android Studio, 16 KB Pages, Policy Changes, Compose Tips, Play Games and so much more!
  • 👍 4
  • 😁 2
Post #2334 3.81K
Google Sans Code

Monospace шрифт с различным написанием "l" и "1", or "O" и "0". Уже доступен в Android Studio. Выглядит удобно
  • 🔥 12
  • 👍 3
Post #2333 4.06K
Android Good Reads Я не хочу превращать Android канал в новостник на тему очередного прорыва в AI, поэтому соберу в кучу несколько полезных статей и холиварных топиков, которые отражают мою позицию. 👉 Как AI влияет на способность думать "гораздо проще написать промпт, закинуть…
Продолжаем искать полезности в эре AI для Android:

👉 Сгенерированная вики для любого репозитория. Пример для compose-mp репы и для retrofit.
👉 Junie, интегрированная в IDE, получила необходимый набор инструментов для современного AI-coding плагина, а так же возможность взаимодействовать через Github
👉 SDD (Spec driven development) Не новый подход, нашедший свое применение в AI инструментах. В кратце: сначала определяем задачу и все требования (spec) -> затем ее дизайним -> и только потом приступаем к реализации.

Лично я по чуть-чуть перешел в терминальные тулзы(ClaudeCode, GeminiCLI, OpenCode), потому что переключаться между Android Studio и форками VScode уже порядком надоело
  • 👍 9
  • 🔥 4
  • ❤ 2
Post #2332 4.18K
История о том как с помощью Perfetto нашли и решили проблему долгого ответа от подключенных USB девайсов к Android платформе. Пришлось сделать пул в AOSP, но задержка упала на 40%.

Если вы разрабатываете кассовое ПО - это точно статья, обязательная к прочтению
  • 🔥 6
  • 👍 5
  • 👌 2
Post #2330 3.69K
Изучаем PausableComposition в Jetpack Compose

Введён недавно, в обновлении 1.9.х. Вообще это внутреннее апи и если у вас нет желания разбираться в том как Compose оптимизирует производительность, то это знание вам и не потребуется, но интересно же?
Shreyas Patil's Blog Exploring PausableComposition internals in Jetpack Compose | Shreyas Patil's Blog Explore the internals of PausableComposition in Jetpack Compose. Learn how Compose manages state and effects when a composition is paused or resumed.
  • 🔥 5
Post #2329 4K
Напоминание: В пору кучи AI - сгенерированного кода не забывайте закручивать гайки через lint / detekt, дабы снимать с себя большую часть работ по ревью этого в проекте. Гайд как это сделать

Лучше, конечно, обратиться к официальной доке: https://detekt.dev/docs/intro
Medium Improve Your Kotlin Code Quality with Detekt in Android Unlock a Safer, Faster, and Freer Internet
  • 🔥 9
  • 👍 7
Post #2328 4.47K
Про поддержку 16KB page

Зачем?
Девайсы с поддержкой 16 KB работают быстрее на 5-10%, а так же:
👉 Старт приложений быстрее (до 30% для некоторых приложений, 3.16% в среднем),
👉 Меньше расход батареи (на 4.56% меньше)
👉 Быстрее запуск камеры (4.48-6.60%)

Как?
👉APK Analyze/Alignment Checks/Lint поможет найти вселомающую зависимость
👉Обновляем AGP до 8.5.1+, NDK до r28+.
👉Если не помогло то кропотливо выискиваем нужные флаги из официальных рекомендаций

Тестируем
Необходимые эмуляторы уже в Android Studio
  • 👍 14
  • 🔥 4
  • ❤ 3
  • 👏 1
  • 🏆 1
Post #2327 3.67K
Android Good Reads Недавний релиз Kotlin 2.2.0 👉 Фича в превью: контекстные параметры 👉 Экспериментальные функции теперь стабильны: guard conditions, нелокальные операторы break и continue, а также multi-dollar интерполяция строк. 👉 Унифицированное управление предупреждениями…
Напоминаю, стрим с разработчиками на тему Kotlin 2.2 сегодня в 14:00 UTC. Я ошибся в прошлом посте
  • 👍 3
Post #2326 4.26K
Так как я чертовски заинтересован в увеличении комьюнити CMP разработки, то вот вам свежая и полезная библиотечка Alarmee, которая является оберткой для всякого рода пушей.
Firebase, Локальные, Отложенные и повторяющиеся пуши - всё тут!
Никаких больше болей по надстройке пушей на платформах!
GitHub GitHub - Tweener/alarmee: A Kotlin/Compose Multiplatform library to schedule alarms, display local notifications, and handle push… A Kotlin/Compose Multiplatform library to schedule alarms, display local notifications, and handle push notifications on Android and iOS. - Tweener/alarmee
  • 👍 7
  • 🔥 3
  • 👎 1
Post #2325 3.62K
Android Good Reads Шпаргалка по flow операторам Внутри примеры кода с пояснением для: 👉 map, filter, take(n) 👉 reduce, fold, runningReduce/scan, 👉 transform 👉 FlatMapConcat, FlatMapMerge, FlatMapLatest 👉 flowOn, buffer, conflate, collectLatest 👉 zip, combine, merge 👉 catch…
В комментах Osip(@rareilly) подсказал еще 1 шпаргалку: https://flowmarbles.com/

Намного нагляднее и с удобной навигацией, а не статьей на медиуме!
  • 🔥 14
  • 👍 11
Post #2324 3.53K
Шпаргалка по flow операторам

Внутри примеры кода с пояснением для:
👉 map, filter, take(n)
👉 reduce, fold, runningReduce/scan,
👉 transform
👉 FlatMapConcat, FlatMapMerge, FlatMapLatest
👉 flowOn, buffer, conflate, collectLatest
👉 zip, combine, merge
👉 catch, onCompletion, retryWhen
👉 onEach, debounce(timeoutMillis), distinctUntilChanged

Проверяем себя, что все вышеперечисленное использовали хоть раз и знаем!
  • 👍 15
  • 🔥 4
  • ❤ 2
Post #2322 3.4K
Уменьшаем размер приложения

Вам стоит пропустить эту статью если у вас уже настроено:
👉 Минимальный R8 со специфичными правилами под каждую библиотеку. Вы проверяете его работу не на проде, а с помощью testProguardFiles, например
👉 Перевели все картинки в webp формат, вырезали ненужные ресурсы в конфигурациях
👉 Аккуратно переиспользуете layout
👉 Используете appBundle
Carrion.dev Reducing App Size: Proguard, R8, App Bundles & Resource Shrinking A comprehensive guide to reducing Android app size using Proguard, R8, App Bundles, and Resource Shrinking techniques for better performance and user experience.
  • 👍 6
  • ❤ 2
  • 🔥 1
Post #2321 3.08K
Недавний релиз Kotlin 2.2.0

👉 Фича в превью: контекстные параметры
👉 Экспериментальные функции теперь стабильны: guard conditions, нелокальные операторы break и continue, а также multi-dollar интерполяция строк.
👉 Унифицированное управление предупреждениями компилятора.
👉 Изменения в генерации методов по умолчанию для функций в интерфейсах.
👉 Поддержка LLVM 19 и новые возможности для отслеживания и настройки потребления памяти
👉 Разделение Wasm-таргета и возможность настраивать Binaryen для каждого проекта
👉 Исправлена работа метода copy, генерируемого для интерфейсов с аннотацией @JsPlainObject
👉 В плагин Kotlin Gradle включена проверка бинарной совместимости.
👉 API для Base64 и HexFormat теперь стабильны.

10 июля в 16:00 UTC будет стрим с разработчиками
The JetBrains Blog Kotlin 2.2.0 Released - The JetBrains Blog The Kotlin 2.2.0 release is out! This version includes both new and stable language features, tooling updates, performance improvements for different platforms, and important fixes. Learn more!
  • 👍 7
  • 🔥 5
  • ❤ 4
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →