Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
🚀 Как снять видео с 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🤯1
🚀 Вышел 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
🚀 Вышел Core SplashScreen 1.2.0

Что нового:
🌙 Добавлен атрибут isLightTheme для тем SplashScreen — можно корректно выбирать оформление под светлую/тёмную тему
🖼 Иконка загрузки теперь корректно подтягивается через AppCompatResources (улучшена поддержка ресурсов и векторных изображений)
👉 Убрали ручное объявление обращения к новым API — теперь всё автоматически моделируется при сборке с AGP ≥ 7.3 и R8 ≥ 3.3
🐘 Для AGP 8.1 и выше — всё работает “из коробки” без дополнительных настроек ⚙️ (рекомендуется обновление до этой версии AGP или выше)

#android #jetpack #androidjetpack #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34🎉54
🚀 Вышла стабильная версия 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
🔥56👍9🤔53
Пример использования 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
👍164
🚀 Вышла стабильная версия 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
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5
🚀 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
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥10🤯3👍2🙏1
🚀 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
🚀 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 #Производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍10🤯5
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
🚀 Jake Wharton рекомендует использовать Beta и RC версии Android Jetpack библиотек

Легенда разработчик Джейк Уортон призвал использовать Beta и RC версии Android Jetpack библиотек, а не ждать стабильных релизов. Далее про причины

🚀 Beta ≠ "сырая версия". В экосистеме Android Jetpack бета-версии — это по сути стабильные релизы, которые прошли альфа-тестирование.
👍 Фиксы багов будут быстрее. Beta и RC получают исправления багов быстрее, чем стабильные релизы.
🔍 Раннее обнаружение проблем. Вы можете найти и сообщить о багах до выхода стабильного релиза и помочь сообществу раньше.

Такие причины сподвигнут вас брать Beta и RC? Ну точно нет. Некоторые ждут по 1-2 неделе после выхода Stable, чтобы обновляться!

#AndroidDev #Jetpack #BestPractices #JakeWharton
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉25🤔22👍131🏆1🆒1
🚀 Вышла SwipeRefreshLayout 1.2.0 — важные исправления для "pull-to-refresh"

Google выпустил обновление библиотеки SwipeRefreshLayout до версии 1.2.0. В основном релиз содержит исправления багов, которые улучшают работу жеста обновления.

Исправление визуальных артефактов
- Иконка обновления теперь полностью убирается после сворачивания (исчезает её тень)
- Сброс всех свойств иконки после сворачивания, чтобы она корректно отображалась при следующем вызове

👍Корректная обработка Touch-событий. Метод requestDisallowInterceptTouchEvent() теперь работает как в обычных ViewGroup. Это важно для вложенных scroll-контейнеров.

Если новое поведение с обработкой touch-событий ломает ваше приложение, можно вернуть старое через:
swipeRefreshLayout.setLegacyRequestDisallowInterceptTouchEventEnabled(true)


#AndroidDev #Jetpack #UI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍9
🚀 Google выпустила androidx.webgpu:webgpu:1.0.0-alpha01 — WebGPU нативно в Android-приложения.

WebGPU — это новый графический и вычислительный API, который приходит на смену устаревающему WebGL. Его цель — дать разработчикам современный доступ к GPU для тяжёлых визуальных и вычислительных задач как в вебе, так и теперь — в Android, благодаря androidx.webgpu. Если упрощённо — WebGPU открывает дверь к автоматически оптимизированной работе с видеокартой без необходимости использовать низкоуровневые графические движки.

Что даёт WebGPU разработчикам:
🧩 Современная графика уровня Vulkan/Metal/DX12
⚙️ Compute-шейдеры для вычислений прямо на GPU
🚀 Высокую производительность рендеринга и ML-вычислений
🔁 Кроссплатформенность: единый подход Web + Android (и не только)
📦 Потенциально меньше нативного кода на C++/NDK
🧪 Удобный доступ к GPU-фичам для прототипов и экспериментов

Версия для Android пока в alpha, API нестабилен, документации немного. Но это важный шаг: Google фактически легализует WebGPU как будущий GPU-базис на Android.

#AndroidDev #Android #Jetpack #AndroidJetpack #WEB #GPU
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥91
🚀 Jetpack Ink 1.0 стабильна! Библиотека для работы с рукописным вводом и графикой

Google выпустил стабильную версию Jetpack Ink 1.0 — библиотеку для создания продвинутых функций рукописного ввода (inking) и рисования в Android-приложениях.

Это многомодульная библиотека, которая обрабатывает цифровые штрихи (strokes) от ввода (стилус или палец) до их показа. Она предоставляет все необходимые инструменты для создания реалистичного и отзывчивого опыта письма или рисования.

👨‍💻 Кому будет полезна?
👉 Разработчикам приложений для заметок, скетчей, цифровых подписей.
👉 Образовательным приложениям, требующим аннотирования документов или изображений.
👉 Любому продукту, где нужен реалистичный, выразительный пользовательский ввод поверх контента.

Библиотека берет на себя сложности обработки графики, физики мазков и обработки жестов, позволяя легко добавить профессиональные функции рисования.

#Jetpack #AndroidDev #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37👎43🔥1
🚀 Core-Backported-Fixes 1.0: Умная проверка исправлений системных багов

Google выпустил новую библиотеку Core-Backported-Fixes 1.0. Она помогает приложениям определить, установлены ли на устройстве пользователя критические исправления системных ошибок от Google.

Когда Google выпускает исправление системной ошибки Android, его распространение на все устройства занимает месяцы. Эта библиотека позволяет приложению проверить, применено ли конкретное исправление на текущем устройстве, и в зависимости от этого выбрать безопасную стратегию работы.

Библиотека предоставляет API для проверки статуса известных проблем (KnownIssues) по их ID.

val fixManager = BackportedFixManager()
if (fixManager.isFixed(KnownIssues.KI_398591036)) {
// Исправление установлено, можно использовать функцию
useFeatureSafely()
} else {
// Исправления нет, включаем обходной путь
useFallbackWorkaround()
}


Пока что библиотека содержит информацию об одной известной проблеме - KI_398591036: Аномальные цветовые тона при съёмке в формате JPEG-R на некоторых устройствах Pixel. Рекомендация — использовать обычный JPEG, пока проблема не исправлена.

👨‍💻 Кому это будет полезно?
👉 Разработчикам, чьи функции зависят от конкретных системных исправлений.
👉 Приложениям, работающим с аппаратными возможностями (камера, датчики), где часто встречаются специфичные для устройств баги.
👉 Тем, кто хочет повысить стабильность и избежать сбоев, связанных с прошивкой.

#AndroidDev #Jetpack #Pixel
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👎42🎉1
🚀 Обновление для WebView с упором на производительность и контроль

Вышла версия 1.15.0 библиотеки AndroidX WebKit (WebView). Главное изменение — повышение minSdk с API 21 до API 23 😁

🎯 Ключевые новые возможности:

⚡️ Ускорение загрузки
👉 prerenderUrlAsync() — предварительная загрузка (prerender) страниц для мгновенного открытия.
👉 Profile.preconnect() — предварительное установление соединения с origin.
👉 Profile.addQuicHints() — подсказка WebView использовать протокол QUIC/HTTP3 для ускорения.

🔧 Больше контроля
👉 setHyperlinkContextMenuItems() — кастомизация контекстного меню для ссылок.
👉 setBackForwardCacheSettings() — настройка Back/Forward кэша (таймауты, лимиты).
👉 Profile.addCustomHeader() — установка кастомных HTTP-заголовков для запросов.

🔒 Безопасность и отладка
👉 Новый WebViewBuilder API для создания WebView с неизменяемой конфигурацией, что повышает безопасность при использовании addJavascriptInterface.
👉 Улучшенные API для отладки асинхронной инициализации WebView.
👉 Также возвращена отправка заголовка X-Requested-With, а старый API для его исключения помечен как deprecated.

#WebView #AndroidDev #Jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20👎4🔥42
🚀 Media3 1.9.0: 4 новых модуля, Compose UI и умная предзагрузка

Вышел крупный релиз Jetpack Media3 1.9.0. В центре обновления — четыре новых модуля и значительные улучшения производительности:
👉 Новый модуль media3-inspector — извлечение метаданных (длительность, формат) и кадров (превью) без запуска воспроизведения. Заменяет MediaMetadataRetriever.
👉 Новый модуль media3-ui-compose-material3 — готовые Compose-компоненты в стиле Material 3 для быстрой сборки UI плеера.
👉 Переписали media3-cast — автоматическое управление переходами между локальным (ExoPlayer) и удалённым (Chromecast) воспроизведением.
👉 Переписали media3-decoder-av1 (переписан) — стабильный AV1-декодер на основе библиотеки dav1d от автором VLC плеера.
⚡️ Умный PreloadManager - Добавлена интеграция с кэшем на диске и автоматическое управление памятью. Можно предзагружать большие очереди, не боясь превысить лимит оперативной памяти.
Детектор «зависшего» плеера — автоматически сообщает об ошибке, если воспроизведение не прогрессирует.
👉 Упрощённая настройка кнопок в уведомлениях (Android Auto, Wear OS) через Player.COMMAND_*.
🔮 CompositionPlayer - экспериментальное API для реального превью видеомонтажа перед экспортом через Transformer.

Подробности в официальном блоге

#Android #Jetpack #Media #Chromecast
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👎4👍31