Android Broadcast
14.6K subscribers
3.8K photos
394 videos
11 files
6.26K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
Android Broadcast
📹 Собеседование на Kotlin Multiplatform разработчика 🎙 Проводит — Алексей Панов @kotlin_adept 🗓 Понедельник, 20 октября, 19:00 (GMT+3) Kotlin Multiplatform (KMP) набирает всё большую популярность — растёт количество вакансий и интерес со стороны компаний.…
🏝 Леша Панов @kotlin_adept поделился материалами для углублённого изучения KMP, которые помогут вам глубже разобраться в принципах работы Kotlin Multiplatform и Kotlin Native, а также лучше понять нюансы интеропа со Swift-кодом.

❗️ Подробности в канале Леши

#kmp #swift #native
Please open Telegram to view this post
VIEW IN TELEGRAM
👍236🔥5🤔1
🤖 Google выпустила базовый курс по Kotlin Multiplatform для Android-разработчиков

Если вы уже уверенно пишете под Android, но хотите понять, как работает 🏝 Kotlin Multiplatform — этот курс станет отличной стартовой точкой.
Он включает теорию (видео и статьи) и практические задания 🧩

Из курса вы узнаете:
👉 Как устроена разработка с Kotlin Multiplatform
👉 Как превратить Android-проект в KMP с Android-таргетом
👉 Как использовать common- и platform-specific API
👉 Как интегрировать код в iOS-приложение
👉 Как мигрировать существующие решения на KMP

#kmp #kotlin #android #google #курс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥82👍15🙏1
🏝🤖 На сайте Android Developers обновили материалы по Kotlin Multiplatform:
👉 Обновили главную страницу
👉 Появился базовый курс по KMP (бесплатный)
👉 Обновленные руководство по использованию Jetpack библиотека с поддержкой KMP

#android #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39🔥71
🚀 Вышел SavedState 1.4.0 — теперь с поддержкой nullable типов

Saved State — это библиотека Jetpack, которая помогает сохранять и восстанавливать состояние при пересоздании, например из-за изменений конфигурации в Android или при выгрузке процесса системой. Поддерживает Kotlin Multiplatform


Вышел androidx.savedstate:1.4.0, и в этом обновлении основное внимание уделено улучшению API. Ключевое изменение - добавлена нативная поддержка nullable типов в SavedStateRegistryOwner.saved, а также в функциях encodeToSavedState() и decodeFromSavedState() — теперь можно напрямую сохранять и восстанавливать null-значения без костылей.

// Теперь это работает корректно без дополнительных проверок.
var name: String? by savedState(saved = "name", default = null)


#android #jetpack #kotlin #kmp #jetpackupdate #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥81
🪙 Полный разбор Ktor Client (1 час)

Рассказываю про устройство и фичи Ktor Client, в также про миграцию с OkHttp и и Retrofit на решение для KMP

#AndroidBroadcast #разбор #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
61🔥405👍3🤔3🤯2
🚀 Вышла стабильная версия Jetpack Navigation 3 - бибилотека для UI навигации, заооченная под Compose

Стал доступен первый стабильный релиз навигации, разработанной специально для Compose. Библиотека предоставляет больше гибкости и контроля разработчикам, позволяя реализовать различные подходы. Google выложила свои примеры реализации популярных задач в репозитории на 🐱GitHub

Nav3 имеет поддержку Compose Multiplatform, а также JetBrains выпустила версию артефактов

👉 Документация по библиотеке

Всем кто использует Jetpack Navigation 2 с Compose нааооятельно рекомендуется миграция.
🔨Руководство по миграции
⭐️ Также Google сделала файл с контекстом для AI агента при миграции

Про возможности бибилотеки я рассказал в 📹 отдельном видео

#android #compose #kmp #cmp #jetpack #ui #nav3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥57👍9🤔53
🚀 Navigation Event 1.0.0 — новая KMP-библиотека для обработки навигации на разных платформах

Что дает библиотека
👉 Единый кроссплатформенный API для замены разрозненных решений
👉 Централизованная система управления всей навигацией в приложении
👉 Базовый слой для будущих навигационных решений Android

Пример использования:
val myHandler = object : NavigationEventHandler<NavigationEventInfo>(
initialInfo = CurrentInfo,
isBackEnabled = true
) {
override fun onBackStarted(event: NavigationEvent) {
// Подготовка к навигации
}

override fun onBackProgressed(event: NavigationEvent) {
// Анимации на основе event.progress
}

override fun onBackCompleted() {
// Завершение навигации
}
}


👉 Готовая интеграция с Compose
val navEventState = rememberNavigationEventState(
currentInfo = CurrentInfo,
backInfo = PreviousInfo
)

NavigationBackHandler(
state = navEventState,
isBackEnabled = true,
onBackCompleted = { /* Действие при завершении */ }
)


👉 Диспетчеры могут образовывать родительско-дочерние цепочки:
// Compose
val childDispatcher = rememberNavigationEventDispatcher(
parent =
LocalNavigationEventDispatcherOwner
.current
.navigationEventDispatcher
)


👉 Нативная поддержка Predictive Back из Android
👉 Библиотека уже используется в Activity 1.12.0 как базовый слой

#Jetpack #Navigation #Compose #KMP #PredictiveBack #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍162
🤯 Зачем делать мультиплатформу, если есть AI? Своими мыслями делюсь в 📹 новом видео

Кажется, что AI та серебряная пуля, которую так хотели для экономии на разработке под iOS и Android

#AndroidBroadcast #AI #ИИ #kmp #flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯16👍108🔥4
Media is too big
VIEW IN TELEGRAM
📹 Введение в FlowMVI

FlowMVI - простая и эффективная библиотека для реализации MVI подхода в Android и Kotlin Multiplatform приложениях.

Из видео вы узнаете про возможности бибилотеки и интеграцию ее в проект.

Автор библиотеки Никита @nek_12 сделал серию видео с демонстрацией возможностей. Все видео будут доступны на YouTube и VK Video, а автору очень нужна ваша поддержка и обратная связь в комментариях под видео (а не этим постом).

#MVI #Архитектура #KMP #Kotlin #Кодинг
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥35🤔196👍3🆒2🤯1
Media is too big
VIEW IN TELEGRAM
🤖 Jetpack Navigation 3: Полный гид по новой библиотеке навигации от Google

Гугл выпустил Navigation 3 — это новая глава в построении навигации для Android-приложений. Всё, что вы знали, теперь стало мощнее, гибче и композабльнее!

00:00 — Базовые принципы Navigation 3
02:09 — NavEntry и entryProvider
03:29 — Разбор API на практике
07:17 — Навигация в многомодульном приложении
11:27 — Модуляризация: пишем код
15:57 — Анимации экранов
16:15 — Погружаемся в анимации
19:44 — Адаптивные макеты (Scenes)
23:01 — Scenes в действии
24:39 — Краткий итог и выводы

🔗 Официальное руководство
🔗 Рецепты для работы с Nav3 (Code recipes)

Навигация больше не будет болью! Смотрите, внедряйте и делитесь впечатлениями в комментариях.

#Android #AndroidDev #Jetpack #Compose #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍9🎉3
📹 Архитектура, которая не ломается | FlowMVI Часть 2

В этой части Никита @Nek12 разбирает, как FlowMVI применяет архитектурные подходы, позволяющие поддерживать предсказуемое поведение приложения и исключать хаотичные ошибки. Покажет, как инструмент помогает выстраивать MVI архитектуру, ориентированную на устойчивую работу в условиях многопоточности и постоянных изменений данных.

#Android #KMP #MVI #Архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔20👍8🔥3🆒1
🚀 Cash App перевел Android-приложение на Metro — новый DI фреймворк для Kotlin

Команда Cash App (Block) успешно мигрировала своё Android-приложение с Anvil/Dagger на Metro — современный фреймворк для dependency injection, разработанный Zac Sweers.

Metro — это compile-time DI фреймворк, вдохновленный Dagger и Anvil, но реализованный как Kotlin compiler plugin. Он Kotlin-first, поддерживает K2 и работает значительно быстрее традиционных решений. Вобрал в себя всё лучшее от Dagger, Anvil и Kotlin-Inject

Почему перешли на Metro?
- Скорость сборки — ускорение инкрементальных сборок на ~60%
- Поддержка Kotlin K2 — возможность использовать новейший компилятор Kotlin
- Упрощение стека — отказ от kapt и Java-ориентированных инструментов
- Современный подход — Kotlin-first дизайн и улучшенный DX
- Более строгая валидация DI-графа
- Улучшена безопасность типов (нуллабельность)
- Поддержка KMP

📊 Результаты по скорости сборки:
- Инкрементальные сборки → ускорение на 58-60%
- Чистые сборки → ускорение на 17%
- ABI-изменения → сборка за 11.9s вместо 28.8s

Миграция 1500 модулей проводилась постепенно с двойной поддержкой двух DI фреймворков для безопасного перехода. В зависимости от настройки Gradle менялся DI и генерация кода.

Впервые вижу подход, когда был описан граф для 2 разных DI с целью постепенной миграции. Миграцию с Koin на Metro так не сделать, но вот с Koin Annotations на Metro вполне может получится.

#DI #KMP #Dagger #Metro #Android #AndroidDev #Anvil
👍44🔥185👎1
🤖 Вышел Coil 3.4.0

Coil - это библиотека для загрузки изображений на Android (и теперь Compose Multiplatform). Название расшифровывается как Coroutine Image Loader — библиотека написана на Kotlin с первого дня и отлично вписывается в современный стек: корутины, Compose, KMP.


В новой версии несколько интересных вещей:

🔁 ConcurrentRequestStrategy — теперь можно объединять параллельные сетевые запросы на один и тот же ресурс. По умолчанию отключено и помечено как экспериментальное, но идея хорошая — вместо N одинаковых запросов летит один, остальные ждут результата.

🧵 Асинхронный декодинг JS/WASM — изображения больше не блокируют главный поток браузера. Важно для KMP-проектов с вебом.

🐧 Linux targets — добавили поддержку linuxX64 и linuxArm64 для non-Compose артефактов.

🎞 Улучшенные переходы в Compose — новый useExistingImageAsPlaceholder позволяет плавно переходить от предыдущего изображения, когда нет placeholder. Мелочь, но визуально приятно.

🎬 Embedded video thumbnails — поддержка встроенных превью для видео.

🔧 coil-lint — добавили Android Lint-правило, которое ловит случайные вызовы kotlin.error() внутри блоков ImageRequest.Builder. Неожиданно полезно.

Зависимости Kotlin 2.3.10, Compose 1.9.3, Okio 3.16.4.

#Android #AndroidDev #KMP #kCMP #Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40👎54🔥1👏1🤔1👌1
🤖 AndroidX Tracing 2.0 — поддержка Desktop JVM и Kotlin Coroutines

AndroidX Tracing — это библиотека для добавления данных в код, которая позволяет видеть что происходит внутри приложения в профилировщиках вроде Perfetto и Android Studio.


До версии 2.0 она была завязана исключительно на android.os.Trace — то есть работала только на Android. Теперь всё изменилось.

Версия 2.0 полностью пересматривает подход:
👉 Поддержка Desktop JVM — трейсинг теперь работает не только на Android, но и на обычной JVM. Это открывает возможность профилировать host-инструменты, Gradle-таски и shared-код в KMP-проектах.
👉 Propagation для корутин — классическая проблема: suspend-функции разрывали трейс на несвязанные куски и было непонятно что к чему относится. Теперь traceCoroutine() прокидывает контекст трейса через корутины автоматически.
👉 Метаданные в слайсах — к каждому трейс-событию можно прикрепить аргументы. Видишь слайс в Perfetto и сразу понимаешь с какими параметрами он вызван.
👉 Новый формат — Perfetto trace — трейсы совместимы с Android Studio и Perfetto UI из коробки.

Новый API выглядит так:

val driver = TraceDriver(sink = TraceSink(
sequenceId = 1,
directory = File("/tmp/perfetto")
), isEnabled = true)

driver.use {
driver.tracer.trace(category = CATEGORY_MAIN, name = "my_operation") {
// твой код
}
}


⚠️ Пока это только alpha и многих привычных возможностей нету, но будут к релизу Stable версии.

#Android #AndroidDev #KMP #AndroidX #Производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👎6🔥63🤔2
🚀 Начали разработку Room 3.0, который станет полностью KMP-библиотекой с поддержкой JS и WASM, а также избавится от легаси.

Разработчики популярного ORM для Android и KMP решили выпустить мажорную версию, чтобы отразить всю важность изменений:
👉 Полный переход на androidx.sqlite driver API.
👉 Генерация кода будет только на Kotlin, никакой больше Java.
👉 APT и KAPT больше не будут поддерживаться. Остается только KSP.
👉 Room API теперь будет делаться в подходе "Kotlin Coroutines first", делая весь ORM асинхронным по умолчанию.

Что нас ждет из новых фичей и возможностей:
👉 Появится полноценная поддержка JS и WASM-таргетов.
👉 Можно будет добавить собственные возвращаемые типы в Room. Например, Room, RxJava, Paging и пр.

Новая версия Room будет выпущена под новым пакетом androidx.room3. Room 2.X не получит новых фичей, только багфиксы.

🔗 Источник - блог Android Developers.
🔗 Release Notes Room 3.0.0-alpha01

#Android #AndroidDev #Room #SQLite #Jetpack #AndroidJetpack #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥88👍22👎73🤯1
🏝 Вышла первая стабильная версия Metro DI — чистого Kotlin-решения с валидацией графа на этапе компиляции.

Решение вобрало в себя всё самое лучшее от Dagger, Anvil и kotlin-inject, чтобы стать тем стандартом для KMP-проектов, который искали после Dagger.

Metro DI не использует KSP или KAPT. Вся генерация осуществляется с помощью плагина компилятора Kotlin.

#Kotlin #KMP #DI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62👎6
🤯 Те кто использовал Jetpack Paging 3 знают насколько он может справиться только с базовыми сценариямми. Шаг влево или вправо - уже боль!

Сегодня хочу познакомить вас с альтернативой — библиотекой 🐱 Paginator. Это KMP-решение для пагинации, которое решает те самые проблемы, где Paging 3 начинает "буксовать".

Paginator построен на отличной модели от Jetpack Paging 3: страница — это адресуемая ячейка в кэше, кэш — обычная структура данных, а навигация — обычные методы.

1️⃣ Адресуемые страницы
Прямые методы goNextPage(), goPreviousPage() и jump(Bookmark). Deeplink на сообщение из пуша решается одной строкой.

2️⃣ Мутации по запросу
MutablePaginator предоставляет CRUD-операции: replace { it.id == 42 }, removeWhere { it.deleted }. Один лайк меняет один элемент без инвалидации всей страницы.

3️⃣ Сохраняемое состояние
Кэш — обычная структура данных, которую можно сериализовать через kotlinx.serialization. Методы serializeToJson() и restoreFromJson() решают проблему Process Death без плясок с бубном.

4️⃣ Библиотека, а не фреймворк
Написан на чистом Kotlin без платформенных зависимостей и живёт в commonMain. Логика пагинации становится частью общего доменного слоя KMP, не копируется между платформами и не имеет двух реализаций.

5️⃣ Курсорная пагинация "из коробки"
Отдельный класс CursorPaginator с единой моделью состояний, транзакций и сериализации.

Paginator — это не обёртка над Paging 3. Это другая модель, переосмысливающая ключевые типы. Обёртка просто не смогла бы дать ни мутации элемента, ни сериализации кэша.


🔗 Оригинальная статья на Хабре
🐱 Репозиторий Paginator

#Android #AndroidDev #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82👎31
📃 Сравнение скорости работы Metro DI vs Dagger/Hilt в Android проекте.

У меня по рабочей задаче встал вопрос какой DI выбрать для трансформации Android проекта в KMP с поддержка Android, iOS, Desktop и конечно нормальной работой с Compose. Решил понять чего будет стоить миграции на Metro DI и был приятно удивлен.

За день с помощью AI перевел Now In Android на Metro и запустил различные тесты сравнения влияния DI на сборку проекта. Подробности в 🪙 полной статье на Boosty

#Dagger #Metro #KMP #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM
5👎33👍114🔥2
🔴 Отказались от Compose Multiplatform и вернулись в натив. Разбираем кейс компании
Когда: вторник, 30 июня, 19:00 GMT+3

В прямом эфир буду обсуждать с разработчиком из компании, которая перешла на Kotlin Multiplatform, а теперь отказались и возвращаются назад! С другой стороны - я который переводит разработку банка на Compose Multiplatform.

Эфир пройдет на 🪙 Boosty, запись будет опубликована позже там же

#Kotlin #KMP #CMP #Compose #AndroidBroadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
👍60👎17
🚀 Вышел Room 3.0 Stable и это не просто поднять версию, а надо мигрировать на новую библиотеку!

Google зарелизил Room 3.0 (androidx.room3), и это самый серьёзный мажор Room за всю его историю: библиотеку переписали под Kotlin Multiplatform с нуля.

Ради обратной совместимости 3.0 живёт в отдельном пакете и maven-координатах (androidx.room3:room3-runtime вместо androidx.room:room-runtime), поэтому 2.x и 3.x спокойно уживаются в одном проекте на разных базах данных. Мигрировать можно постепенно, модуль за модулем.

Cама миграция не косметическая. Cursor и SupportSQLite слой под Android убраны, всё теперь через корутины:

// было (Room 2.x)
roomDatabase.query("SELECT * FROM Song").use { cursor -> ... }

// стало (Room 3.x)
roomDatabase.useReaderConnection { connection ->
connection.usePrepared("SELECT * FROM Song") { stmt -> ... }
}


KAPT для Room больше не работает вообще, только KSP и весь код генерируется на Kotlin. InvalidationTracker.Observer заменили на Flow (createFlow()). Конфигурация через Executor тоже ушла, теперь CoroutineContext.

Из нового:
🔥 FTS5 через @Fts5
🔥 поддержка JS и WasmJS (драйвер поверх Web Worker и OPFS)
🔥 кастомные DAO return type converters. Paging, RxJava и LiveData интеграции теперь строятся на одном общем API вместо трёх разных костылей ранее.

‼️ ВАЖНО: это не «обновил зависимость и всё скомпилировалось». Если у тебя много прямых обращений к SupportSQLiteDatabase или ты завязан на Executor-конфигурацию, то закладывай время на миграцию.

#Android #AndroidDev #KMP #Web #WASM #AndroidJetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥74👎30👍102