TGINSIGHT CHAT
Android Broadcast
@android_broadcast
TechnologiesПодборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR
Posts récents
Tag : #compose · 74 posts
Publié 23 avr.
⚙️Jetpack Compose 1.11 — стабильный релиз! 🚀 Что нового: 👉 Визуальная отладка переходов Shared Elements 👉 Переработанная поддержка трекпадов — теперь работают как мышь и распознают жесты 👉 Preview Wrappers для более быстрой работы с превью 👉 Host Defaults для KMP-проектов 👉 Testing APIs v2 для корутин 👉 Экспериментальные API: Styles, MediaQuery, Grid, FlexBox Подробности по каждому пункту — отдельными постами в @compose_broadcast #Compose#Android#AndroidJetpack
Hashtags
Publié 6 avr.
HotSwan - быстрое обновление Composable на реальном устройстве. Доступно как плагин для Android Studio Я выбрал другой путь - делаю СMP проект с поддержкой Android + Desktop JVM и так можно быстро проверять + делать код чище. #Compose
Hashtags
Publié 4 mars
🤯Конец Android View ближе чем кажется - в будущей версии Android Studio убирают поддержку превью для Custom View. Источник - сайт Android Developers #Android#AndroidDev#Compose#AndroidStudio
Publié 26 févr.
⚙️Compose Remote уже в Альфа. Шаг за шагом выходят версии и BDUI на Compose уже в пути! Подробнее писал тут #Android#Compose#BDUI#SDUI
Publié 25 févr.
🤖 Вышел 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
Publié 22 déc.
🤖Улучшаем работу со Stacktrace в Jetpack Compose (особенно в релизе) Команда Compose представила opt-in API для улучшения читаемости стектрейсов во время разработки и для релизов. Теперь становится возможным: 👉 Точно определять источник крешей в композиции, Side Effect (LaunchedEffect, DisposableEffect) и корутинах из rememberCoroutineScope. 👉 Изолировать падения для создания воспроизводимых примеров. 👉 Изучать креши, которые раньше показывали только внутренние фреймы Compose. Достаточно добавить одну строку в точке входа в приложение (например, в Application.onCreate()): // Включить stack trace только для минифицированных сборок (рекомендуемый способ) Composer.setDiagnosticStackTraceMode(ComposeStackTraceMode.Auto) // Или для локальной отладки (более точные, но тяжёлые трассировки) Composer.setDiagnosticStackTraceMode(ComposeStackTraceMode.SourceInformation) ‼️ВАЖНО Требуется Kotlin 2.3.0, а для режимов `Auto` и `GroupKeys` - включённый R8 с минификацией. Есть несколько режимов работы ✔️Auto (рекомендуется): использует GroupKeys для минифицированных сборок и None для отладочных. 👉GroupKeys: для минифицированных приложений. Использует маппинг-файл от R8 для восстановления примерного местоположения. 👉SourceInformation: для отладки. Даёт точные строки где произошел креш, но затратно по производительности. Стоит использовать только на этапе разработке. ❌None: ничего не добавляет (поведение по умолчанию). Под капотом любой креш в Compose коде оборачивается в DiagnosticComposeException, который добавляется в suppressed-исключения. В нём будет полная иерархия вызовов `@Composable` функций на момент падения! java.lang.IllegalStateException: Test layout error at <original trace> Suppressed: androidx.compose.runtime.DiagnosticComposeException: Composition stack when thrown: at ReusableComposeNode(Composables.kt:<unknown line>) at Layout(Layout.kt:79) at <lambda>(TempErrorsTest.kt:164) <-- Ваша функция! ... и т.д. ⚠️ Известные ограничения: 👉 В режиме SourceInformation для первых фреймов могут не указываться номера строк (<unknown line>). 👉GroupKeys указывает только на первую строку @Composable функции. 👉 Если сам сбор стектрейса упадёт, его исключение будет добавлено как suppressed. Подробнее в официальной документации 💬 А вы уже пользовались этой фичей? Делитесь в комментариях! 👇 #AndroidDev#Kotlin#Compose#R8#Android
Publié 4 déc.
⚙️Вышел Jetpack Compose 1.10.0 👉 Стабильное API Shared Transition 👉 Оптимизированный скролл 👉 Новые подходы к сохранению данных при пересоздании Activity через ViewModel 🚀 Повышена производительность UI на Compose 🛠 Исправлено багов и шероховатостей Изменений действительно много — в один пост всё не поместить. Буду разбирать ключевые обновления по отдельности в следующих публикациях на @compose_broadcast✨ #compose#android
Publié 3 déc.
🤖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
Publié 1 déc.
‼️Google отменяет Compose Material Icons С релизом Compose Material 3 — версии 1.4.0 Google сделала радикальный шаг: библиотека androidx.compose.material.icons исключена из Material3 и больше не рекомендуется к использованию. Что произошло 👉 Material Icons удалены из актуального релиза Material3 1.4.0 👉 Поддержка библиотеки прекращена 👉 Можно подключить вручную, но это временная мера для тех, кто не успел мигрировать ❌ Основная причина отказа - негативное влияние на скорость сборки. Библиотека Material Icons тащит весь огромный набор иконок. Это ощутимо увеличивает build time крупных Android и Compose Multiplatform проектов. Google предлагает переходить на Vector Drawable XML в Android или Compose Multiplatform ресурсах. Скачивайте иконки с вкладки Android на странице Material Symbols и храните в ресурсах проекта Преимущества использования Material Symbole: ✔️ актуальный набор иконок ✔️ минимальный вес и отсутствие лишних зависимостей ✔️ предсказуемое время сборки ✔️ лучший контроль над ресурсами проекта ❗️ Обновлений библиотеки Material Icons не будет! Источник - официальная документация Android Jepack Благодарю подписчика Evgeny F. за то, что обратил внимание на изменение. #Android#AndroidJetpack#Material3#Compose#CMP
Publié 24 nov.
⚙️ Команда Compose добилась плавности скрола как в View на Android. Источник тут #compose
Hashtags
Publié 21 nov.
🚀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
Publié 20 nov.
🚀Lifecycle 2.10.0 вышел в стабильной версии! Google выпустила мажорное обновление библиотек Lifecycle. Этот релиз сфокусирован на улучшении интеграции с Compose. ⚙️rememberLifecycleOwner для Compose Новый композабл позволяет создавать изолированные LifecycleOwner внутри UI. Идеально для компонентов, которым нужно независимое управление состоянием — например, для HorizontalPager, где только активная страница должна быть в состоянии RESUMED. @Composable fun MyComposable() { val lifecycleOwner = rememberLifecycleOwner( maxLifecycle = Lifecycle.State.RESUMED, parentLifecycleOwner = LocalLifecycleOwner.current, ) CompositionLocalProvider( LocalLifecycleOwner provides lifecycleOwner ) { // Дочерние композаблы теперь имеют собственный жизненный цикл } } 🚀 Интеграция с Navigation 3 Новый артефакт lifecycle-viewmodel-navigation3 предоставляет готовый декоратор для автоматической привязки ViewModel к отдельным экранам в Navigation 3. NavDisplay( backStack = backStack, entryDecorators = listOf( rememberSaveableStateHolderNavEntryDecorator(), rememberViewModelStoreNavEntryDecorator(), // Добавляем эту строку ), entryProvider = entryProvider { /* ... */ } ) Удобства для разработчиков: 👉 Идиоматичный Kotlin API для создания кастомных CreationExtras CreationExtras { this[MY_CUSTOM_KEY] = "myValue" } 👉 Метод savedStateHandle.saved() теперь нативно поддерживает nullable типы 👉Конструкторы SavedStateHandle помечены как @VisibleForTesting ⚠️ Важное изменение Повышение minSdk с API 21 до API 23 — убедитесь, что ваше приложение соответствует новым требованиям. #Jetpack#Lifecycle#Compose#Navigation#ViewModel#Kotlin