Forwarded from Android Broadcast
#Android #AndroidDev #Производительность #Оптимизация
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from iOS Good Reads – swift, разработка мобильных приложений, архитектура, блокчейн, VR, AR, карьера, IT (Egor Tolstoy)
AdaEngine – новый игровой движок на Swift
AdaEngine – 2D игровой движок, построенный вокруг паттерна Entity Component System. Есть поддержка физики, кастомных шейдеров и описания интерфейса на SwiftUI.
Только-только вышел первый публичный релиз, если есть вопросы, пишите автору – @SpectralDragon.
AdaEngine – 2D игровой движок, построенный вокруг паттерна Entity Component System. Есть поддержка физики, кастомных шейдеров и описания интерфейса на SwiftUI.
Только-только вышел первый публичный релиз, если есть вопросы, пишите автору – @SpectralDragon.
adaengine.org
A simple and scalable game engine built in Swift.
Forwarded from Mobile Developer
https://proandroiddev.com/resolving-savedstatehandle-crashes-with-hilt-assisted-injection-in-jetpack-navigation-3-63ebd50b88af
Боль при миграции на Nav3: код из Nav2, где ViewModel читал аргументы маршрута из SavedStateHandle через toRoute(), внезапно крашится. Причина - Nav3 больше не пропихивает Route в SavedStateHandle автоматически.
Внутри - полный пример с Serializable Route'ами, фабрикой, регистрацией в entryProvider DSL и тестовым кейсом.
——————
Telegram | Селеба | Max | YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from StartAndroid
Вышел Kotlin 2.4.0
Что нового:
- Language: Stable context parameters, explicit backing fields, and multiple features for annotation use-site targets.
- Standard library: Stabilized support for the UUID API and support for checking sorted order.
- Kotlin/JVM: Support for Java 26 and annotations in metadata enabled by default.
- Kotlin/Native: Support for Swift packages as dependencies, updates on Swift export, and the CMS GC enabled by default.
- Kotlin/Wasm: Incremental compilation enabled by default and support for WebAssembly Component Model.
- Kotlin/JS: Support for value class export and ES2015 features in JS code inlining.
- Gradle: Compatibility with Gradle 9.5.0.
- Maven: Automatic alignment between Java and JVM target versions.
- Kotlin compiler: More consistent inline function behavior during .klib compilation.
#kotlin
https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/
Что нового:
- Language: Stable context parameters, explicit backing fields, and multiple features for annotation use-site targets.
- Standard library: Stabilized support for the UUID API and support for checking sorted order.
- Kotlin/JVM: Support for Java 26 and annotations in metadata enabled by default.
- Kotlin/Native: Support for Swift packages as dependencies, updates on Swift export, and the CMS GC enabled by default.
- Kotlin/Wasm: Incremental compilation enabled by default and support for WebAssembly Component Model.
- Kotlin/JS: Support for value class export and ES2015 features in JS code inlining.
- Gradle: Compatibility with Gradle 9.5.0.
- Maven: Automatic alignment between Java and JVM target versions.
- Kotlin compiler: More consistent inline function behavior during .klib compilation.
#kotlin
https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/
The JetBrains Blog
Kotlin 2.4.0 Released - The JetBrains Blog
The Kotlin 2.4.0 release is out! This release brings new language features, support for Swift packages as dependencies, updates to Swift export, and more. Take a look!
Forwarded from Kotlin Multiplatform Broadcast
Уже попробовали новый синтаксис создания коллекций?
Final Results
4%
Да
52%
Нет
34%
Нафиг нужно
10%
Не участвую
Forwarded from Compose Broadcast
This media is not supported in your browser
VIEW IN TELEGRAM
@NavDestination, @NavEdge, @NavGraphRoot, KSP статически собирает граф, а IDE-плагин рисует карту: каждый экран отрендеренной @Preview-миниатюрой через Layoutlib, без эмулятора. Переходы стрелками, двойной клик прыгает в исходник, граф мёржится по всем модулям. Канвас редактируемый — тянешь связь от экрана к экрану, и плагин сам вписывает @NavEdge в код.Работает с Navigation 3, Navigation 2 и даже голыми Activity. KMP из коробки: аннотации в commonMain, есть сэмпл на KotlinConf-приложении (26 экранов, 36 переходов).
Бонусом
.nav baseline по аналогии с apiDump/apiCheck: navCheck валит сборку, когда граф разъезжается с закоммиченным базелайном.#Compose #AndroidStudio
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kotlin Multiplatform Broadcast
Touchlab выкатил большой разбор с прямым сравнением двух путей экспорта KMP в iOS: новый Swift Export от JetBrains против связки Obj-C bridge + SKIE. Сравнивают не галочками фич, а скомпилированным выводом обоих подходов. Это сильная сторона текста, можно повторить и посмотреть сгенерированный код самому.
Swift Export в Kotlin 2.4 дошёл до alpha и подтянул concurrency. Идея простая - генерировать нативный Swift API напрямую, без прослойки Objective-C. Swift Export и Obj-C export взаимоисключающие, поэтому выбор бинарный, смиксовать нельзя.
Где Swift Export уже выигрывает:
👉 Nullable-примитивы маппятся напрямую в
Int32?, без обёрток типа KotlinInt👉 Сохраняет
typealias и структуру пакетов👉 Настоящие изолированные Swift-модули вместо одного umbrella-фреймворка
SharedГде пока проигрывает, и это важно для прода:
👉 Generics по сути не поддерживаются. Только Kotlin-типы как параметры, value-типы Swift отваливаются, бывает что просто не компилится
👉 Sealed-классы теряют исчерпываемость. Никакого
onEnum, обязательный default, компилятор не поймает новый кейс👉 Extension-функции деградируют в static-функции с явным receiver. Совсем не по-свифтовому
👉 Всё помечается
final, кросс-языкового наследования нетВывод авторов - для нативного iOS UI сегодня по-прежнему SKIE, а Swift Export годится для пет-проектов и небольших MVP.
Cтатью писал Touchlab, авторы SKIE и драйверы KMP в сообществе. По фактам они правы, Swift Export пока alpha и дыры реальные. Но «SKIE definitive choice» это уже их акцент, читайте с этой поправкой. Направление от JetBrains очевидное - KMP-проекты без Objective-C под капотом. Вопрос только в сроках, слишком уж долго они топили за поддержку Obj-C интеропа и игнорировали Swift.
#Kotlin #KMP #Swift #IOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Команда прогнала свой браузер (открытый проект на 160 модулей) через открытые Develocity Build Validation Scripts. Скрипты гоняют сборку в разных условиях и показывают, какие задачи зря выполняются заново вместо того, чтобы взяться из кеша.
Главная находка про Room. Пути экспорта схем были заданы абсолютными, значит на каждой машине (ноутбук разработчика, CI-агент) получался свой input и свой ключ кеша. Любая сборка на другой машине била мимо. Лечится переходом на Room Gradle Plugin, который держит относительные пути. После фикса в эксперименте с разными путями на диске выполняемых задач стало 27 вместо 440.
😁 Вторая находка про Dagger. Либа генерила классы с непредсказуемым порядком методов: один и тот же исходник на двух CI-ранах давал побайтно разный вывод и промах по кешу. Апгрейд до Dagger 2.53+ с детерминированным выводом вернул в кеш 1619 задач. Опять же важность обновления до свежих версий.
Цифрами по статье манипулируют знатно. Заголовочные 57% относятся к лучшему локальному сценарию: сборке в git worktree после CI. Сквозной выигрыш по реальному CI скромнее, 19% на полном пайплайне с тестами и 39% на сборке debug APK. Инструментальные и Firebase-тесты не кешируются в принципе, поэтому потолок там ниже. Но даже из этого уже есть простые оптимизации, которые стоит проверить.
🔗 Источник - статья на Gradle блоге
#android #gradle #room #buildcache #dagger
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Compose Broadcast
This media is not supported in your browser
VIEW IN TELEGRAM
@NavDestination, @NavEdge, @NavGraphRoot, KSP статически собирает граф, а IDE-плагин рисует карту: каждый экран отрендеренной @Preview-миниатюрой через Layoutlib, без эмулятора. Переходы стрелками, двойной клик прыгает в исходник, граф мёржится по всем модулям. Канвас редактируемый — тянешь связь от экрана к экрану, и плагин сам вписывает @NavEdge в код.Работает с Navigation 3, Navigation 2 и даже голыми Activity. KMP из коробки: аннотации в commonMain, есть сэмпл на KotlinConf-приложении (26 экранов, 36 переходов).
Бонусом
.nav baseline по аналогии с apiDump/apiCheck: navCheck валит сборку, когда граф разъезжается с закоммиченным базелайном.#Compose #AndroidStudio
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Google выпустили Developer Preview 4 XR SDK. Главное, что снижает порог: XR Emulator встроен в Android Studio, итерировать можно без Samsung Galaxy XR в руках.
Для мобильных разработчиков добавили нормальный способ расширить существующее приложение на display glasses. Jetpack Projected получил Device Availability API — привязывается к стандартным Android Lifecycle-состояниям, апп адаптируется к очкам нативно. Ускорить переезд помогает Android CLI с display glasses skill — специализированные скиллы, которые делают UI на Compose Glimmer по паттернам Google. Сам Glimmer в этом превью обновили под прозрачные дисплеи: читаемость текста и touchpad-навигация.
Для game dev: Unreal Engine и Godot теперь официально поддерживаются наряду с Unity. Вместе с ними выпустили Android XR Engine Hub под Windows — real-time тест прямо во viewport движка.
Открылась Android XR Developer Catalyst Program: пре-релизное железо (display glasses + wired XR), поддержка и помощь с запуском на Google Play. Заявки принимают прямо сейчас.
🔗 Источники - android-developers.googleblog.com
#AndroidXR #Jetpack #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
В hh.ru рассказали, как переезжали с Fragment-навигации на Compose + Modo в двух приложениях: 400+ экранов, 70 диплинков, 14 команд. Миграция идёт с 2022 года — и в июне 2026 ещё не завершена.
Modo выбрали за UDF-подход (состояние всей иерархии экранов — обычные данные, переходы — функция от состояния) и потому что разработчик Игорь Кареньков работает внутри hh.ru — можно дорабатывать без ожидания апстрима. Это же стало и первой граблей.
Ключевое решение для глобальных контейнеров: абстракция
NavScreen с двумя реализациями — Fragment и Modo Screen, роутер выбирает через feature toggle в рантайме. Это позволило раскатывать переезд через A/B и не стопорить продуктовую разработку. При первой раскатке словили краш в ComposeView, продуктовые метрики просели — остановили, починили, раскатили снова. Без feature toggle был бы хотфикс-релиз.Три реальные грабли:
👉 Слишком ранний выбор незрелой библиотеки — вложили много времени в доработки самой Modo
👉 Три параллельные миграции одновременно (View→Compose, Fragment→Modo, редизайн) — создали жёсткие зависимости и замедлили продуктовую разработку
👉 Старт без стратегии и метрик — месяцы хаоса, пока не завели дашборд с прогрессом
Если планируешь похожий переезд — там есть что взять.
#Android #Compose #Навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Dolgo.polo Dev | Денис Долгополов
технически VPN на андроид — это сервис
внутри можно получить
inputStream с байтами трафика всех приложенияclass MyVpnService : VpnService() {
fun startService() {
val tunFd = Builder()
.setSession("MyVPN")
.addAddress("10.0.0.2", 24)
.addRoute("0.0.0.0", 0)
.establish()
Thread {
val input = FileInputStream(tunFd.fileDescriptor)
}.start()
}VPN работает на уровне IP/TCP/UDP пакетов
Ему плевать, какой тип трафика в этих байтах — данные внутри могут быть упакованы по протоколу http/https или вообще gRPC/GraphQL/SIP/MQTT...
Он получает сырой набор байт, которые надо зашифровать/переупаковать любым алгоритмом и доставить на сервер
💡 А может ли приложение VPN расшифровать https трафик?
Может, но только если пользователь добавит SSL-сертификат, созданный самим VPN-клиентом, в список доверенных
Получится классическая man-in-the-middle, в которой VPN сможет расшифровывать трафик
Оказывается, существуют даже мобильные версии снифферов вроде Proxyman. Они как раз поднимают VPN-сервис и просят установить кастомный сертификат
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Compose Broadcast
Камера в CMP это всегда возня с
expect/actual и тремя платформенными бэкендами. Kamera (бывшая CameraK) закрывает это одним Compose-first слоем: один @Composable-вход, под капотом CameraX на Android, AVFoundation на iOS и JavaCV на Desktop.API реактивный, через состояние. Заводишь
rememberCameraKState(), получаешь StateFlow<CameraKState> c ветками Initializing, Ready(controller, uiState) и Error, и рисуешь превью, когда камера готова:val cameraState by rememberCameraKState(
config = CameraConfiguration(
cameraLens = CameraLens.BACK,
aspectRatio = AspectRatio.RATIO_16_9,
),
)
when (val state = cameraState) {
is CameraKState.Ready -> CameraPreviewView(state.controller)
is CameraKState.Initializing -> CircularProgressIndicator()
is CameraKState.Error -> Text(state.message)
}
Из коробки: зум, вспышка, фонарь, переключение линз (ultra-wide/telephoto на iOS),
takePictureToFile() для прямого сохранения в файл. Сверху плагины, которые сами активируются на Ready: сохранение фото, QR/штрихкоды, OCR, запись видео с pause/resume и лимитом длительности, анализ кадров через analyzer.Главное в 1.0: починили то, что мешало брать в прод. На iOS фронталка отдавала тёмные кадры из-за бага в
MemoryManager, хотя превью выглядело нормально. На Android фото оказывалось кропом вместо настроенного аспекта, теперь что видишь, то и снимаешь. Плюс вычистили утечки корутин в плагинах при ре-ините камеры.‼️ Это молодая 1.0 и по сути проект одного мейнтейнера под Apache-2.0. Блокеры выше жили буквально до вчера, так что 1.0 это точка, где их закрыли, а не годы шлифовки. Desktop тянет JavaCV с нативными либами, это тяжело. Но если нужна камера в CMP без трёх реализаций руками, смотреть стоит.
#Compose #ComposeMultiplatform #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Compose Broadcast
This media is not supported in your browser
VIEW IN TELEGRAM
v1 умел одно — применять изменения значений без rebuild: цвет, padding, текст, размеры — результат за секунду, приложение живёт. Добавить composable, переставить layout, поменять control flow — всё это шло в полный rebuild.
v2 убирает эту границу. Без рестарта приложения: добавляем и удаляем composable-функции, меняем структуру layout, переписываем conditional UI. И главное — заменяем целый экран на совершенно другой код. Навигационный стек и
remember-состояние сохраняются.Технически v2 запускает изменения через собственный интерпретатор, обходя ограничения ART на переопределение классов — тот же подход, что у Flutter. При слишком глубоких изменениях деградирует плавно: сбрасывает composition с сохранением
rememberSaveable и ViewModel, в крайнем случае рестартит Activity. Полный rebuild нужен только при изменении сигнатур функций, иерархии классов и inline-функций.В v2 также MCP-сервер: AI-агент триггерит reload, снимает скриншот с устройства, итерирует по вариантам. Claude Code и Cursor работают из коробки через file watcher.
Поставить: IDE-плагин вручную с бета-канала Marketplace + Gradle-плагин
2.0.0-beta01:[plugins]
hotswan-compiler = { id = "com.github.skydoves.compose.hotswan.compiler", version = "2.0.0-beta01" }
Инструмент платный инструмент, лицензия и цены на hotswan.dev/pricing.
Такого охвата hot reload в нативном Compose ещё не было. Аргумент Flutter про быстрый feedback loop заметно слабеет.
#Compose #JetpackCompose #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
С 16 июня появятся предупреждения про превышение бесплатных лимитов на месяц, с 11 августа 2026 начнётся реальное ограничение бесплатных публикаций.
Пороги у 90 перцентиля: 1 167 файлов в месяц, 78 МБ суммарно, 7 релизов. Большинство open source разработчиков не заметят. Кто публикует много и часто — проверьте Usage Center уже сейчас.
Лично мне интересно, как это ляжет на KMP-проекты. Один multi-target релиз — это десятки файлов на каждую платформу: sources, javadoc, pom, подписи. Sonatype говорит, что работает с JetBrains над смягчением. Посмотрим.
🔗 Официальная документация о лимитах
#Maven
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Решил обновить compileSdk до Android 37, а там, оказывается, удалили старый Fingerprint API, который был до BiometricPrompt. Чем он им помешал? Ведь теперь обеспечивать поддержку старых версий Android сложнее, но это отдельный разговор.
В ходе миграции я узнал, что обновления библиотеки androidx.biometric — сущий хаос:
👉 Самая свежая версия — 1.4.0, и она только в альфе.
👉 Версия 1.3.0 вообще не делалась.
👉 Версия 1.2.0 не получила стабильного релиза, остановившись на альфе.
👉 Самая свежая стабильная версия — 1.1.0, которая вышла в 2021 году!
#Android #AndroidDev #Security
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Google выпустила финальный Android 17. Исходники открылись в AOSP, обновление катится на поддерживаемые Pixel-устройства.
Главный сигнал релиза: Android официально Compose-first. Все новые API, библиотеки, инструменты и документация будут создаваться только для Jetpack Compose. View (
android.widget), Fragments, RecyclerView, ViewPager переходят в maintenance mode: только критические баги, никаких новых фич. Вопрос «когда View умрёт» закрыт — она уже в maintenance.Breaking changes при таргете SDK 37:
👉
resizeableActivity=false, screenOrientation, minAspectRatio / maxAspectRatio игнорируются системой на large screen (sw > 600 dp). Игры освобождены, остальные нет.👉
static final поля нельзя менять через reflection: IllegalAccessException. Через JNI — краш.👉 Native-библиотеки через
System.load() должны быть read-only, иначе UnsatisfiedLinkError.👉 Доступ к локальной сети заблокирован по умолчанию: нужен
ACCESS_LOCAL_NETWORK.👉 Lock-Free
MessageQueue быстрее, но ломает код с reflection на приватных полях.‼️ ВАЖНО CameraX: обновитесь до
1.5.2 или 1.6.0+ — краш на Android 17 из-за нового режима dynamic range.Из остального: Generational GC в ART, жёсткие лимиты памяти с принудительным завершением процессов, Post-Quantum Cryptography (ML-DSA), AppFunctions как on-device MCP API для AI-агентов (alpha, Gemini в private preview).
#Android #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
XREAL официально представил Aura (бывший Project Aura): лёгкие проводные очки с прозрачным дисплеем, вычисления вынесены в карманный блок на новом Snapdragon Reality Elite, Gemini в системе. Финальной цены нет, но база «не дороже $1500», резерв открыли за $99.
Google показал что на этом строить. Демка XR Geospatial Tour: надеваешь очки, поверх города висят 3D-подсказки, голосовой гид рассказывает про здания перед тобой. Внутри Geospatial API (VPS от Google в ARCore for Jetpack XR, субметровая точность и направление взгляда, точнее GPS), Gemini с Google Maps Grounding для маршрутов, Gemini TTS для озвучки и Compose for XR для 3D.
Если смотреть на рынок: смартфоны выезжены вдоль и поперёк, складные остались нишей, а лёгкие очки это правда новое место, где игра ещё не сыграна. Aura важна именно этим: форм-фактор наконец похож на то, что хочется носить, а не на шлем на полдня.
#Android #AndroidXR #XR #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
📃 Сравнение скорости работы 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
Forwarded from Android Broadcast
Hydra — это RASP-плагин для Android: подключаешь одной строкой в
build.gradle.kts, и на выходе assembleRelease APK несёт обфусцированное нативное ядро с защитой.plugins {
id("com.android.application")
id("com.github.iamjosephmj.hydra") version "1.9.0"
}Что проверяет на старте процесса: рут-доступ, Frida/hooking-инструменты, клонирование через virtual spaces (Parallel Space и похожие), эмуляторы, целостность APK. Нашёл критичное — завершает процесс. Без advisory-режима, сразу kill.
secrets {} в конфиге шифрует строки при сборке, в classes.dex попадает только цифертекст, расшифровка только на чистом устройстве:val url = withContext(Dispatchers.IO) { Hydra.secret("apiUrl") }Всё on-device, без сети, без телеметрии.
INTERNET permission не объявляется вообще.⚠️ Ядро
libdicore.so закрыто и обфусцировано — проверить что именно кладётся в APK нельзя. Для финтех-продакшна это принципиальный вопрос. Kill-by-default сломает эмуляторы в QA — тестировать только на реальных чистых устройствах. QUERY_ALL_PACKAGES потребует декларации в Play Console.В продакшн только после того, как понял, что именно ты кладёшь в свой APK.
#Android #AndroidDev #Безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
‼️ Каждый год 31 августа наступает дедлайн по повышению targetSdk. В этом году дедлайн потребует минимум 36 (Android 16), и это не просто цифра в Gradle-скриптах!
Чуть больше двух месяцев до дедлайна Google Play. С 1 сентября новые публикации и обновления должны таргетировать Android 16 (API 36). Пропустить срок — приложение пропадёт из выдачи для новых пользователей на устройствах с Android новее вашего текущего таргета.
Главная ловушка: переход на
👉
👉 Native .so и 16KB page size. Если в приложении или транзитивных зависимостях есть нативный код — нужна проверка совместимости. NDK 27+ и
👉
👉 Health permissions.
Тестировать breaking changes можно уже сейчас, не повышая
Или точечно по конкретному флагу — удобнее разбирать изменения по одному. Подробнее читайте в документации.
#Android #AndroidDev #Android16
Чуть больше двух месяцев до дедлайна Google Play. С 1 сентября новые публикации и обновления должны таргетировать Android 16 (API 36). Пропустить срок — приложение пропадёт из выдачи для новых пользователей на устройствах с Android новее вашего текущего таргета.
Главная ловушка: переход на
targetSdk = 36 включает breaking changes, которые начинают работать сразу после сборки. Что поменяется после смены цифры:👉
onBackPressed() больше не вызывается. На Android 16 его переопределение игнорируется. Нужен OnBackPressedDispatcher или OnBackInvokedCallback.👉 Native .so и 16KB page size. Если в приложении или транзитивных зависимостях есть нативный код — нужна проверка совместимости. NDK 27+ и
useLegacyPackaging = false. Без этого возможны краши на части устройств.👉
USE_FULL_SCREEN_INTENT требует явного разрешения. Звонки, будильники, доставка — всё, что показывает уведомления поверх экрана блокировки, перестанет работать без декларации в манифесте.👉 Health permissions.
BODY_SENSORS и BODY_SENSORS_BACKGROUND заменяются на гранулярные android.permission.health.* — READ_HEART_RATE, READ_OXYGEN_SATURATION и т.д.Тестировать breaking changes можно уже сейчас, не повышая
targetSdk, через compat framework:adb shell am compat enable-all com.yourapp
Или точечно по конкретному флагу — удобнее разбирать изменения по одному. Подробнее читайте в документации.
#Android #AndroidDev #Android16