TGINSIGHT CHAT
Android Broadcast
@android_broadcast
TechnologiesПодборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR
Posts récents
Tag : #jetpack · 98 posts
Publié 21 nov.
🚀Input MotionPrediction 1.0.0 — снижаем задержки ввода с предсказанием жестов Google выпустила первую стабильную версию Input MotionPrediction — библиотеку для уменьшения задержек при вводе за счет предсказания будущих MotionEvents. Что это решает? 👉 Уменьшает perceived latency (воспринимаемую задержку) при взаимодействии с UI 👉 Предсказывает будущие координаты касания для более плавного отклика 👉 Особенно полезно для рисования, игр и жестовой навигации // Создаем предсказатель val predictor = MotionEventPredictor() // Записываем полученные события predictor.record(motionEvent) // Получаем предсказанные события на N миллисекунд вперед val predictedEvents = predictor.predict(milliseconds) Ключевые особенности: 👉 Автоматически использует системные API предсказания если доступны 👉 Встроенный алгоритм предсказания 👉 Поддерживает ориентацию и наклон стилуса 👉 Оптимизирован по памяти и производительности ‼️ Кому будет полезна: - Приложения для рисования и скетчей - Игры с тач-управлением - Сложные жестовые интерфейсы - Любой UI, где важна мгновенная реакция на касания #Jetpack#Android#UI#Производительность
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
Publié 20 nov.
🚀Вышла стабильная версия Jetpack DataStore 1.2 Google выпустила долгожданный стабильный релиз DataStore 1.2.0. Эта версия приносит несколько важных улучшений, которые делают библиотеку ещё более мощной и удобной, особенно для проектов, не полностью перешедших на Kotlin Coroutines. Ключевые нововведения: ✅Поддержка Guava Появился новый модуль datastore-guava, который предоставляет API на основе ListenableFuture для разработчиков, использующих Guava. Теперь подключать DataStore в проекты на Java стало намного проще (а нужно было???) // Пример использования GuavaDataStore val guavaDataStore: DataStore<Preferences> = GuavaDataStore.from( produceFile = { context.preferencesDataStoreFile("settings.pb") }, serializer = PreferencesSerializer, executor = Dispatchers.IO.asExecutor() // Используем Executor ) ListenableFuture<Preferences> future = guavaDataStore.getData(); ✅ Мультипроцессность для GuavaDataStore Функциональность многопроцессного доступа, ранее доступная для Kotlin-версии, теперь добавлена и в GuavaDataStore. ✅Поддержка Android Direct Boot - работа приложений до разблокировки устройства DataStore теперь можно безопасно использовать в режиме Direct Boot. Для этого данные нужно разместить в защищённом хранилище устройства (Device Protected Storage). val directBootDataStore = DataStoreFactory.createInDeviceProtectedStorage( serializer = PreferencesSerializer ) { context.preferencesDataStoreFile("direct_boot_settings.pb") } ✅ Исправления важных багов 👉 Устранен UnsatisifedLinkError при использовании R8 без стандартного ProGuard-файла. 👉 Исправлена проблема, из-за которой операции GuavaDataStore могли запускаться на главном потоке вместо указанного IO-диспетчера. 👉 Решена проблема с FileNotFoundException в OkioStorage при одновременном обращении к файлу (добавлена вторая попытка чтения). Прочие улучшения 👉 Добавлен PreferencesFileSerializer — готовый сериализатор для работы с FileStorage. #Android#Jetpack#DataStore#Kotlin#Java#Guava
Publié 20 nov.
Пример использования Jetpack Navigation 3 data object ProductList data class ProductDetail(val id: String) @Composable fun MyApp() { // Create a back stack, specifying the key the app should start with val backStack = remember { mutableStateListOf<Any>(ProductList) } // Supply your back stack to a NavDisplay so it can reflect changes in the UI // ...more on this below... // Push a key onto the back stack (navigate forward), the navigation library will reflect the change in state backStack.add(ProductDetail(id = "ABC")) // Pop a key off the back stack (navigate back), the navigation library will reflect the change in state backStack.removeLastOrNull() } // [END android_compose_navigation3_basic_1] @Composable fun EntryProvider() { val backStack = remember { mutableStateListOf<Any>(ProductList) } NavDisplay( backStack = backStack, // [START android_compose_navigation3_basic_2] entryProvider = { key -> when (key) { is ProductList -> NavEntry(key) { Text("Product List") } is ProductDetail -> NavEntry( key, metadata = mapOf("extraDataKey" to "extraDataValue") ) { Text("Product ${key.id} ") } else -> { NavEntry(Unit) { Text(text = "Invalid Key: $it") } } } } // [END android_compose_navigation3_basic_2] ) } #android#compose#nav3#jetpack
Publié 20 nov.
🚀Вышла стабильная версия 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
Publié 6 nov.
🚀Вышел Core SplashScreen 1.2.0 Что нового: 🌙 Добавлен атрибут isLightTheme для тем SplashScreen — можно корректно выбирать оформление под светлую/тёмную тему 🖼 Иконка загрузки теперь корректно подтягивается через AppCompatResources (улучшена поддержка ресурсов и векторных изображений) 👉 Убрали ручное объявление обращения к новым API — теперь всё автоматически моделируется при сборке с AGP ≥ 7.3 и R8 ≥ 3.3 🐘 Для AGP 8.1 и выше — всё работает “из коробки” без дополнительных настроек ⚙️ (рекомендуется обновление до этой версии AGP или выше) #android#jetpack#androidjetpack#jetpackupdate
Publié 6 nov.
🚀 Вышел 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
Publié 30 oct.
🚀Как снять видео с FPS 120, 240 и выше c Jetpack CameraX В Jetpack CameraX 1.5 появилась фича high-speed capture - позволяет делать съемку с высокой частотой кадров. Также это может использоваться для съёмки slow-motion видео. Не все устройства смогут снимать видео с высокой частотой кадров, а если и смогут, то это это будет разрешение FullHD или ниже. CameraX проверяет информацию на основе CamcorderProfile, который провалидирован с помощью Android Compatibility Test Suite (CTS) для каждого устройства. Если вам интересно, то в статье найдете подробную инструкцию по реализации в коде. #android#jetpack#камера#camerax
Publié 30 oct.
🐱Cahier - Новый пример Android приложения от Google. Cahier "кай-е́" (тетрадь по-французски) Что нашел из интересного в коде: 😮 Никакого дизайна (но всё на Compose). Адаптивный дизайн под разные размеры экрана 🚀 Использование рисования пером с помощью библиотеки Jetpack Ink 🔥 Пример редактора с рисованием с базовым функционалом 🤯 Для сериализации взяли GSON, а не KotlinX Serialization 🌐 Offline-first - работа без интернета #android#google#jetpack#opensource#пример
Publié 27 oct.
🤖Google рассказала как стоит адаптировать Android приложения для работы на XR Отличия Android XR от visionOS от Apple заключается в том, что гарнитуры позволяют запускать обычные Android приложения, но чтобы улучшить опыт можно выполнить небольшую адаптацию с помощью Jetpack XR SDK. На примере адаптации приложения Androidify (оно у меня не запустилось в эмулятор XR) как выполнять адаптацию. Полезно тем кто хочет попробовать это! Надо будет попробовать это на FrameIO после реализации его MVP версии #android#xr#jetpack
Publié 24 oct.
🚀Вышел Jetpack Compose Material3 Adaptive 1.2.0 Если коротко про изменения — Material3 Adaptive всё ближе к полноценному “Responsive Compose”. Теперь можно писать интерфейсы, которые одинаково естественно ведут себя на телефоне, планшете и десктопе. Главное: 🪶 Levitate-стратегия для ThreePaneScaffold — превращает панель в плавающее окно (popup). ↔️ Reflow-стратегия для ThreePaneScaffold — позволяет при узком экране уводить одну панель под другую, сохраняя UX. 👉 PaneScaffoldScope.saveableStateHolder — сохраняет состояние между разными конфигурациями экрана. 👉 Modifier.preferredHeight() — теперь можно задать предпочтительную высоту панели. 📏 Новые WindowSizeClasses: API currentWindowAdaptiveInfo() теперь распознаёт Large и ExtraLarge окна — важный шаг к поддержке планшетов и десктопов. 👉 Drag-to-resize получил настройку пользовательского поведения и поддержку a11y (accessibility). 🏝 Плюс: обновлён Kotlin 2.0, переработано API стратегий, исправлены ошибки с анимациями и рендерингом при адаптации. #compose#material3#adaptive#android#jetpack