Android Broadcast
#kmp #swift #native
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤6🔥5🤔1
Если вы уже уверенно пишете под Android, но хотите понять, как работает
Он включает теорию (видео и статьи) и практические задания 🧩
Из курса вы узнаете:
👉 Как устроена разработка с 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
👉 Обновили главную страницу
👉 Появился базовый курс по 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🔥7❤1
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🔥8❤1
Рассказываю про устройство и фичи Ktor Client, в также про миграцию с OkHttp и и Retrofit на решение для KMP
#AndroidBroadcast #разбор #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
61🔥40❤5👍3🤔3🤯2
Стал доступен первый стабильный релиз навигации, разработанной специально для Compose. Библиотека предоставляет больше гибкости и контроля разработчикам, позволяя реализовать различные подходы. Google выложила свои примеры реализации популярных задач в репозитории на
Nav3 имеет поддержку Compose Multiplatform, а также JetBrains выпустила версию артефактов
👉 Документация по библиотеке
Всем кто использует Jetpack Navigation 2 с Compose нааооятельно рекомендуется миграция.
🔨Руководство по миграции
Про возможности бибилотеки я рассказал в
#android #compose #kmp #cmp #jetpack #ui #nav3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥57👍9🤔5❤3
Что дает библиотека
👉 Единый кроссплатформенный 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
👍16❤2
🤯 Зачем делать мультиплатформу, если есть AI? Своими мыслями делюсь в 📹 новом видео
Кажется, что AI та серебряная пуля, которую так хотели для экономии на разработке под iOS и Android
#AndroidBroadcast #AI #ИИ #kmp #flutter
Кажется, что AI та серебряная пуля, которую так хотели для экономии на разработке под iOS и Android
#AndroidBroadcast #AI #ИИ #kmp #flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯16👍10❤8🔥4
Media is too big
VIEW IN TELEGRAM
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🤔19❤6👍3🆒2🤯1
Media is too big
VIEW IN TELEGRAM
Гугл выпустил 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
В этой части Никита @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?
- Скорость сборки — ускорение инкрементальных сборок на ~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
Команда 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🔥18❤5👎1
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👎5❤4🔥1👏1🤔1👌1
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🔥6❤3🤔2
Разработчики популярного 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👎7❤3🤯1
Forwarded from Kotlin Multiplatform Broadcast
Решение вобрало в себя всё самое лучшее от 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️⃣ ✅ Адресуемые страницы
Прямые методы
2️⃣ ✅ Мутации по запросу
3️⃣ ✅ Сохраняемое состояние
Кэш — обычная структура данных, которую можно сериализовать через
4️⃣ ✅ Библиотека, а не фреймворк
Написан на чистом Kotlin без платформенных зависимостей и живёт в
5️⃣ ✅ Курсорная пагинация "из коробки"
Отдельный класс
🔗 Оригинальная статья на Хабре
🐱 Репозиторий Paginator
#Android #AndroidDev #KMP
Сегодня хочу познакомить вас с альтернативой — библиотекой
Paginator построен на отличной модели от Jetpack Paging 3: страница — это адресуемая ячейка в кэше, кэш — обычная структура данных, а навигация — обычные методы.
Прямые методы
goNextPage(), goPreviousPage() и jump(Bookmark). Deeplink на сообщение из пуша решается одной строкой.MutablePaginator предоставляет CRUD-операции: replace { it.id == 42 }, removeWhere { it.deleted }. Один лайк меняет один элемент без инвалидации всей страницы.Кэш — обычная структура данных, которую можно сериализовать через
kotlinx.serialization. Методы serializeToJson() и restoreFromJson() решают проблему Process Death без плясок с бубном.Написан на чистом Kotlin без платформенных зависимостей и живёт в
commonMain. Логика пагинации становится частью общего доменного слоя KMP, не копируется между платформами и не имеет двух реализаций.Отдельный класс
CursorPaginator с единой моделью состояний, транзакций и сериализации.Paginator — это не обёртка над Paging 3. Это другая модель, переосмысливающая ключевые типы. Обёртка просто не смогла бы дать ни мутации элемента, ни сериализации кэша.
🔗 Оригинальная статья на Хабре
#Android #AndroidDev #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82👎3❤1
📃 Сравнение скорости работы 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
У меня по рабочей задаче встал вопрос какой DI выбрать для трансформации Android проекта в KMP с поддержка Android, iOS, Desktop и конечно нормальной работой с Compose. Решил понять чего будет стоить миграции на Metro DI и был приятно удивлен.
За день с помощью AI перевел Now In Android на Metro и запустил различные тесты сравнения влияния DI на сборку проекта. Подробности в
#Dagger #Metro #KMP #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM
5👎33👍11❤4🔥2
Когда: вторник, 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
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👍10❤2