Google выпустил Android 16 QPR2 — первое минорное обновление платформы, которое приносит новые функции без ломающих изменений.
🔧 Новый подход к версиям SDK
Теперь можно проверять минорные обновления через новые поля в Build:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA &&
Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) {
// API из QPR2
}
Ключевые изменения:
👉 Расширенная темная тема — система автоматически инвертирует интерфейс для доступности
👉 Пользовательские формы иконок — пользователи могут менять форму всех иконок
👉 Интерактивный шеринг — обновление контента в реальном времени в превью шаринга
👉 Новый сборщик мусора — снижает нагрузку на CPU
Каждую фичу разберем подробнее в следующих постах! Подписывайте на @android_broadcast, чтобы не пропустить
#Android16 #AndroidDev #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22👍17🔥1
Приложение включает примеры:
👉 Генерацию картинок в чате
👉 Генерации ответов или изменения текста в чате
👉 Мультимодальные возможности
👉 Суммаризация
👉 Генерация описания картинок
👉 и много всего еще
Что-то делается из этого на устройстве, а что-то через облако
#Android #AI #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍6❤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
Forwarded from Compose Broadcast
👉 Стабильное API Shared Transition
👉 Оптимизированный скролл
👉 Новые подходы к сохранению данных при пересоздании Activity через ViewModel
🚀 Повышена производительность UI на Compose
🛠 Исправлено багов и шероховатостей
Изменений действительно много — в один пост всё не поместить.
Буду разбирать ключевые обновления по отдельности в следующих публикациях на @compose_broadcast ✨
#compose #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27❤9👍3
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🔥9❤1
В этой части Никита @Nek12 разбирает, как FlowMVI применяет архитектурные подходы, позволяющие поддерживать предсказуемое поведение приложения и исключать хаотичные ошибки. Покажет, как инструмент помогает выстраивать MVI архитектуру, ориентированную на устойчивую работу в условиях многопоточности и постоянных изменений данных.
#Android #KMP #MVI #Архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔20👍8🔥3🆒1
Раньше системный шузер для шаринга был «односторонним»: вы собрали Intent, отдали его в
Intent.createChooser(...) — и дальше всё полностью контролирует система.После открытия sharesheet вы уже не можете:
👉 обновить текст или вложения;
👉 убрать/добавить таргеты;
👉 синхронизировать состояние с продолжающимся действием в приложении.
Если пользователь что-то поменял (например, отредактировал текст или выбор вложений), приходилось закрывать шузер и открывать его заново.
Не так давно была возможность изменить контент для шаринга из шузера (сделали похожим как в iOS), а также добавить действия.
В Android 16 QPR2 / API 36.1 появился новый механизм — Interactive Chooser Sessions. Теперь приложение может держать живую сессию шаринга, обновлять её и получать события, пока открыт системный sharesheet. Для этого используются
ChooserManager и ChooserSession. // Базовый пример: запуск интерактивной сессии (Kotlin)
val chooserManager: ChooserManager = context.getSystemService()
val shareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "This is a message that will be shared.")
}
val chooserIntent = Intent.createChooser(shareIntent, null)
val session: ChooserSession = chooserManager.startSession(context, chooserIntent)
val token: ChooserSessionToken = session.token
token можно сохранить в ViewModel или savedStateHandle, чтобы потом восстановить сессию после поворота экрана или пересоздания Activity.
val existingToken: ChooserSessionToken = /* restore from state */
val existingSession: ChooserSession = chooserManager.getSession(existingToken) ?: return
Управление сессией через ChooserSession API
val executor: Executor = ContextCompat.getMainExecutor(context)
session.addStateListener(executor, object : ChooserSession.StateListener {
override fun onStateChanged(state: Int) { }
override fun onBoundsChanged(bounds: Rect) { }
})
Временное отключение таргетов на время долгой операции:
session.setTargetsEnabled(false)
val updatedShareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "Updated message generated in runtime")
}
val updatedChooserIntent = Intent.createChooser(updatedShareIntent, null)
session.updateIntent(updatedChooserIntent)
session.setTargetsEnabled(true)
// Завершение сессии, когда шаринг больше не нужен:
session.endSession()
#Android #Android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30❤6
Автор статьи показа пример написания Gradle плагина который кладет секретный ключи в код и выполняет их минимальную защиту через побитовый сдвиг. Не панацея, но как минимум стоит делать такое
#Android #Безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔16👍6❤1
AGSL (Android Graphics Shading Language) — это язык программирования фрагментных шейдеров, представленный в Android 13 (API 33), который позволяет разработчикам создавать сложные графические эффекты, настраивать отрисовку Canvas и фильтровать содержимое View. Он глубоко интегрирован в графический движок Android (Skia), что позволяет применять GPU-ускоренные эффекты напрямую к стандартным элементам интерфейса .
Классная статья, которая описывает простым языком как рабоатет AGSL и какие преимущества дает разработчикам, а также как его начать использовать
#Android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍8❤6
Команда Android Studio выпустила финальный стабильный релиз 2025 года — Otter 2 Feature Drop. Это большое обновление которое в основном строится вокруг AI
✨ Главные нововведения:
🔁 Бэкап и синхронизация настроек
#AndroidStudio #Android #AndroidDev #AI #ИИ #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥4👎1
Совсем скоро состоится релиз Android Gradle Plugin 9.0 (AGP), который полностью меняет подход к конфигурации Android‑проектов: удаляет устаревшие API, упрощает настройку и пересматривает организацию конфигурации.
Ключевые изменения:
👉 Переход на Gradle 9.X
👉 Поддержка Kotlin теперь встроена в AGP — подключение
org.jetbrains.kotlin.android больше не требуется и даже будет рушить сборку. Из плюсов — минус один плагин. 👉 Плагин
org.jetbrains.kotlin.multiplatform больше не будет работать с com.android.library и com.android.application. Используйте com.android.kotlin.multiplatform.library, а для приложения создавайте отдельный модуль. 👉 Массовые изменения в API — множество удалений без прямых альтернатив. В целом идёт отказ от старых публичных интерфейсов, ведь новые уже давно доступны, и авторы плагинов могут их использовать.
👉 Некоторые возможности конфигурации теперь будут доступны только в библиотечном плагине.
Чтобы корректно обновиться до новой версии, нужно, чтобы все плагины, подключённые в проект, поддержали необходимые изменения — или отказаться от них.
Подробнее обо всех изменениях — в документации
Надеюсь, Android Studio добавит ассистента по миграции. А вот авторам плагинов, похоже, прибавится работы 😅
Как вам перемены? Пойдут ли они на пользу скорости сборки и удобству использования AGP?
#Android #AndroidDev #Gradle #AGP #AndroidStudio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35❤7🔥5👎1
В Android Gradle Plugin (AGP) 9.0 и новее появился инструмент, которого ждали многие разработчики SDK и библиотек. Встречайте плагин Fused Library (
com.android.fused-library). Пока в экспериментальном режиме.Раньше, если вы разбивали свой код на много модулей, перед вами вставала дилемма: заставлять пользователя подключать 5 разных зависимостей или использовать неофициальные "fat-aar" скрипты. Теперь Google предлагает нативное решение.
Fused Library плагин позволяет взять несколько Android Library модулей и упаковать их в один AAR [1].
1️⃣ Для включения фичи надо будет добавить флаг в
gradle.properties:android.experimental.fusedLibrarySupport=true
2️⃣ Затем создаем модуль для публикации (например,
my-sdk-fused). В его build.gradle.kts добавляем:plugins {
id("com.android.fused-library")
`maven-publish`
}
androidFusedLibrary {
namespace = "dev.androidbroadcast.mysdk"
minSdk = 23
}
dependencies {
// Указываем модули для "слияния"
include(project(":core"))
include(project(":ui-components"))
// Можно вливать даже внешние либы!
include("dev.androidbroadcast:cool-fonts:1.0")
}Обратите внимание на
include — это ключевая команда для упаковки.3️⃣ Используем компонент
fusedLibraryComponent при публикации артефакта:publishing {
publications {
register<MavenPublication>("release") {
groupId = "dev.androidbroadcast"
artifactId = "fat-sdk"
version = "1.0.0"
from(components["fusedLibraryComponent"])
}
}
}Инструмент мощный, но есть особенности:
❌ Data Binding не поддерживается.
⚠️ Ресурсы: При совпадении имен побеждает ресурс из зависимости, указанной первой.
⚠️ Build Types: Нельзя слить debug и release в один проход, нужны разные fused-модули.
🐞 Source JAR: Пока есть известные проблемы с генерацией исходников.
Подробнее читайте в [документации](https://developer.android.com/build/publish-library/fused-library)
#Android #AndroidDev #Gradle #AGP #Maven
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🔥16❤5👎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
👍43🔥18❤5👎1
В Android уже давно существует системная проблема - вредоносные приложения используют Accessibility API не для доступности, а для атак: скрытое считывание текста с экрана, автоматические клики по кнопкам без ведома пользователя, подмена пользовательских действий и обход бизнес-логики и другие.
В Android 16 добавили возможность запрещать доступ к элементам UI в приложениях
accessibilityDataSensitive - новый флаг позволяет явно пометить UI-элемент как содержащий чувствительные данные. Accessibility-сервисы не могут читать или взаимодействовать с этим элементом, за исключением — легитимные сервисы доступности (screen readers и т.п.),filterTouchesWhenObscured (был до Android 16) - когда у View (или окна) включён filterTouchesWhenObscured = true, то система игнорирует touch события, если в момент касания поверх окна есть другое приложение. Так делают злоумышленники для перехвата касаний, показывая прозрачный overlayИспользовать нужно на:
👉 экранах логина,
👉 платежных формах,
👉 экранах с персональными и финансовыми данными.
// Защита от tapjacking
val composeView = LocalView.current
DisposableEffect(Unit) {
composeView.filterTouchesWhenObscured = true
onDispose {
composeView.filterTouchesWhenObscured = false
}
}
// Защита чувствительных данных
BasicText(
text = "Password",
modifier = Modifier.semantics {
sensitiveData = true
}
)
<TextView
android:filterTouchesWhenObscured="true" />
<TextView
android:accessibilityDataSensitive="true" />
// Через код
view.filterTouchesWhenObscured = true
view.isAccessibilityDataSensitive = true
Новые возможности на заменяет
FLAG_SECURE, а дополняет его#Android #Android16 #Безопасность #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40❤13🔥2👎1
‼️ RuStore отключает API биллинга у разработчиков, оформленными как самозанятые, с февраля 2026
На сайте документации магазина можно найти официальное письмо. Отключается не просто возможность совершения покупок в приложениях/играх, а всё API биллинга, что не позволит разработчикам даже проверять статус уже совершённых покупок.
Как именно это будет работать с 1 февраля 2026:
✅ Останется доступным:
- Публикация и обновление приложений
- Альтернативные способы монетизации (вне платежных инструментов RuStore)
- Возвраты по ранее совершённым платежам
- Переводы платных приложений в бесплатные по запросу
❌ Будет отключено:
- BillingClient SDK и Pay SDK — полностью
- Платные приложения автоматически скроются с витрины
- Списания по активным подпискам будут остановлены
- Проверка статуса уже совершённых покупок станет невозможной
ОСНОВНЫЕ ПРИЧИНЫ ОТКЛЮЧЕНИЯ:
1. Ужесточение регуляции статуса самозанятых в РФ (2026+).
2. Усиление требований регуляторов к платёжным системам
3. Предотвращение репутационных и юридических рисков из-за работы с самозанятыми
ЧТО ДЕЛАТЬ РАЗРАБОТЧИКАМ:
Вариант 1: Переход на ИП/ООО (рекомендуется). Не откладывайте! Регистрация ИП требует времени. Лучше начать процесс в конце 2025 года, чтобы успеть до февраля 2026.
Вариант 2: Регистрация ООО/ИП и перевод приложения на новое юр.лицо
Вариант 3: Сделать приложение бесплатным и перейти на другой биллинг
СРОКИ И ВАЖНЫЕ ДАТЫ:
📅 1 февраля 2026 — дата отключения API биллинга для самозанятых
📅 1 апреля 2026 — дедлайн для выплаты заработанных до этого средств
Более детальная информация доступна в официальной документации
Для связи с поддержкой RuStore: 📧 support@rustore.ru
Я обращусь к представителю RuStore, чтобы получить официальную позицию от магазина
#RuStore #Android #Монетизация
На сайте документации магазина можно найти официальное письмо. Отключается не просто возможность совершения покупок в приложениях/играх, а всё API биллинга, что не позволит разработчикам даже проверять статус уже совершённых покупок.
Как именно это будет работать с 1 февраля 2026:
✅ Останется доступным:
- Публикация и обновление приложений
- Альтернативные способы монетизации (вне платежных инструментов RuStore)
- Возвраты по ранее совершённым платежам
- Переводы платных приложений в бесплатные по запросу
❌ Будет отключено:
- BillingClient SDK и Pay SDK — полностью
- Платные приложения автоматически скроются с витрины
- Списания по активным подпискам будут остановлены
- Проверка статуса уже совершённых покупок станет невозможной
ОСНОВНЫЕ ПРИЧИНЫ ОТКЛЮЧЕНИЯ:
1. Ужесточение регуляции статуса самозанятых в РФ (2026+).
2. Усиление требований регуляторов к платёжным системам
3. Предотвращение репутационных и юридических рисков из-за работы с самозанятыми
ЧТО ДЕЛАТЬ РАЗРАБОТЧИКАМ:
Вариант 1: Переход на ИП/ООО (рекомендуется). Не откладывайте! Регистрация ИП требует времени. Лучше начать процесс в конце 2025 года, чтобы успеть до февраля 2026.
Вариант 2: Регистрация ООО/ИП и перевод приложения на новое юр.лицо
Вариант 3: Сделать приложение бесплатным и перейти на другой биллинг
СРОКИ И ВАЖНЫЕ ДАТЫ:
📅 1 февраля 2026 — дата отключения API биллинга для самозанятых
📅 1 апреля 2026 — дедлайн для выплаты заработанных до этого средств
Более детальная информация доступна в официальной документации
Для связи с поддержкой RuStore: 📧 support@rustore.ru
Я обращусь к представителю RuStore, чтобы получить официальную позицию от магазина
#RuStore #Android #Монетизация
🎉19👍7❤4👎2
Android Broadcast
‼️ RuStore отключает API биллинга у разработчиков, оформленными как самозанятые, с февраля 2026 На сайте документации магазина можно найти официальное письмо. Отключается не просто возможность совершения покупок в приложениях/играх, а всё API биллинга, что…
Если убрать эмоции, то вся история с RuStore выглядит, увы, довольно «типовой».
С одной стороны, у самозанятых уже давно очень ограниченный перечень деятельности, а с 2026 года его ещё ужесточают и параллельно подтягивают ставки и требования к налогам. С другой — для ИП тоже постепенно поднимают нагрузку: растут фиксированные взносы, меняются правила спецрежимов, усиливают контроль.
На этом фоне решение RuStore убрать самозанятых из биллинга — не какое‑то уникальное зло, а скорее часть общей перестройки рынка под новую налоговую реальность. Для тех, кто зарабатывает заметные суммы (не 50–100 тысяч в год, а сильно больше), переход в ИП будет неприятным, но, в целом, рабочим компромиссом: больше бумажек и взносов, зато понятный юридический контур и сохранение встроенной монетизации.
Для совсем мелких и независимых разработчиков это, конечно, удар: ради нескольких десятков тысяч в год тащить на себе ИП мало кто захочет. Но и здесь есть варианты: можно отказаться от встроенного биллинга RuStore и вытащить монетизацию наружу (как скорее всего и работают в Google Play) — подписки/донаты через сторонние платёжные сервисы внутри РФ никто не запрещал.
Моё финальное ощущение такое: да, неприятно, да, придётся перестраивать процессы и считать экономику. Но это не «конец игры», а очередной раунд адаптации к регуляторке. Плюс ещё есть время и, вероятно, будут новости не только от RuStore, но и от других магазинов (тот же Huawei/Galaxy Store тоже живёт в этих же правилах и вряд ли останется в стороне).
#RuStore #Android #Монетизация #Самозанятые #ИП
С одной стороны, у самозанятых уже давно очень ограниченный перечень деятельности, а с 2026 года его ещё ужесточают и параллельно подтягивают ставки и требования к налогам. С другой — для ИП тоже постепенно поднимают нагрузку: растут фиксированные взносы, меняются правила спецрежимов, усиливают контроль.
На этом фоне решение RuStore убрать самозанятых из биллинга — не какое‑то уникальное зло, а скорее часть общей перестройки рынка под новую налоговую реальность. Для тех, кто зарабатывает заметные суммы (не 50–100 тысяч в год, а сильно больше), переход в ИП будет неприятным, но, в целом, рабочим компромиссом: больше бумажек и взносов, зато понятный юридический контур и сохранение встроенной монетизации.
Для совсем мелких и независимых разработчиков это, конечно, удар: ради нескольких десятков тысяч в год тащить на себе ИП мало кто захочет. Но и здесь есть варианты: можно отказаться от встроенного биллинга RuStore и вытащить монетизацию наружу (как скорее всего и работают в Google Play) — подписки/донаты через сторонние платёжные сервисы внутри РФ никто не запрещал.
Моё финальное ощущение такое: да, неприятно, да, придётся перестраивать процессы и считать экономику. Но это не «конец игры», а очередной раунд адаптации к регуляторке. Плюс ещё есть время и, вероятно, будут новости не только от RuStore, но и от других магазинов (тот же Huawei/Galaxy Store тоже живёт в этих же правилах и вряд ли останется в стороне).
#RuStore #Android #Монетизация #Самозанятые #ИП
👍18👎4❤3🔥2🤯1
Google выпустил стабильную версию Jetpack Ink 1.0 — библиотеку для создания продвинутых функций рукописного ввода (inking) и рисования в Android-приложениях.
Это многомодульная библиотека, которая обрабатывает цифровые штрихи (strokes) от ввода (стилус или палец) до их показа. Она предоставляет все необходимые инструменты для создания реалистичного и отзывчивого опыта письма или рисования.
👨💻 Кому будет полезна?
👉 Разработчикам приложений для заметок, скетчей, цифровых подписей.
👉 Образовательным приложениям, требующим аннотирования документов или изображений.
👉 Любому продукту, где нужен реалистичный, выразительный пользовательский ввод поверх контента.
Библиотека берет на себя сложности обработки графики, физики мазков и обработки жестов, позволяя легко добавить профессиональные функции рисования.
#Jetpack #AndroidDev #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37👎4❤3🔥1
Вышел крупный релиз 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👍3❤1
Команда 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤5👎4🔥3
Команда Android Runtime (ART) опубликовала технический разбор оптимизаций, внедренных в 2025 году. Инженеры поставили амбициозную цель: сократить время компиляции, не жертвуя ни пиковым потреблением памяти, ни качеством генерируемого кода.
Самая хорошая новость — это не эксклюзив Android 16 (или будущих версий). Так как начиная с Android 12 компонент ART был выделен в Project Mainline, обновления прилетают через Google Play System Updates. Часть оптимизаций уже раскатана в июньском апдейте 2025 года, остальные придут до конца года.
Подробнее про работу этой системы у меня есть
Ускорение компиляции на устройстве влияет на два сценария:
👉 JIT (Just-in-Time): Приложение быстрее получает оптимизированный код, что снижает лаги и повышает отзывчивость UI.
👉 AOT (Ahead-of-Time): При установке или обновлении приложений устройство тратит меньше ресурсов CPU, что бережет заряд батареи и снижает нагрев.
🔗 Читать полный разбор в блоге Android Developers
#Android #ART #Performance #Mainline
Please open Telegram to view this post
VIEW IN TELEGRAM
👍45🔥28👎5❤1