Android Broadcast
14.5K subscribers
3.84K photos
399 videos
11 files
6.32K links
Подборка новостей и статей для Android разработчиков.

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
Forwarded from Compose Broadcast
⚙️ mediaQuery в Compose: один вызов вместо кучи WindowSizeClass + posture + input

Официально появился mediaQuery — лямбда, которая смотрит на текущий UiMediaScope и возвращает boolean. Внутри можно проверять:
👉 windowWidth / windowHeight
👉 windowPosture (Tabletop, Book, Flat)
👉 pointerPrecision (Fine → Coarse → Blunt → None)
👉 keyboardKind (Physical / Virtual / None)
👉 hasCamera / hasMicrophone
👉 viewingDistance (Near / Medium / Far)

Включается одним флагом при запуске приложения:
ComposeUiFlags.isMediaQueryIntegrationEnabled = true


Для размеров, которые дёргаются часто, лучше использовать derivedMediaQuery (обёртка над derivedStateOf):
// Composable code
val narrowerThanMedium by derivedMediaQuery {
windowWidth < WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND.dp
}
val narrowerThanExpanded by derivedMediaQuery {
windowWidth < WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND.dp
}
when {
narrowerThanMedium -> SinglePaneLayout()
narrowerThanExpanded -> TwoPaneLayout()
else -> ThreePaneLayout()
}


Самый чистый кейс — foldable в tabletop:
// Composable code
if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) {
TabletopLayout()
} else {
FlatLayout()
}


Это API не замена WindowSizeClass, но удобный единый вход для всего, что меняется в рантайме. Если пишете адаптив под foldable / desktop / TV — возьмите на заметку. Пока не перенесли в Compose Multiplatform.

Документация Media Query API

#Compose #JetpackCompose #Adaptive #UI #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤5👎4🔥2
🤖 Jetpack XR SDK: core-библиотеки добрались до Beta

XR SDK - набор библиотек для разработки приложения для очков и шлемов дополненной реальности на Android XR ОС

Google выкатил beta для трёх ключевых кусков:
- androidx.xr.scenecore:scenecore:1.0.0-beta02
- androidx.xr.arcore:arcore:1.0.0-beta02
- androidx.xr.runtime:runtime:1.0.0-beta02

Compose for XR пока ещё 1.0.0-alpha17 (обещают beta скоро).

Тестировать можно на Samsung Galaxy XR или в Android XR Emulator.

🔗 Официальный анонс

#Android #AndroidXR #XR #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15👎5🎉3❤21
🤖 Лимиты памяти на приложение раскатывают на большее кол-во устройств с Android 17

В Android 17 на Pixel уже работают per-app memory limits. Сегодня Google написал, что в течение года их начнут включать всё больше производителей на устройствах от 4 ГБ RAM и больше.

Как это работает на практике:
1. Превысил бюджет → страницы приложения насильно уходят в zRAM (сжатая RAM). CPU-оверхед → jank и тормоза.
2. Приложение продолжает есть много памяти дальше → процесс убивают.

Можно отловить причину это ловится через ApplicationExitInfo:
- reason == REASON_OTHER
- description содержит "MemoryLimiter:AnonSwap"

Можно ещё повесить TRIGGER_TYPE_ANOMALY в ProfilingManager и автоматически снимать heap dump в момент, когда лимит сработал.

Для локального теста поведения можно использовать adb:
adb shell am memory-limiter status
adb shell am memory-limiter manual <pid> <limit_mb>
adb shell am memory-limiter ignore <uid>|all|none


В Android Vitals и Crashlytics 20.1.0 уже есть отдельные сигналы по этим убийствам. Если у тебя в приложении есть тяжёлые экраны, кэши, игры или foreground-сервисы - следи за метриками.

🔗 Источник - блог Android Developers

#Android #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31👎17
🐱 Плагин, который ловит типичные утечки прямо в Android Studio

Coroutine Leak Detector — IDE-плагин для проверки кода корутин и Flow на предмет утечек:
👉 GlobalScope.launch / async
👉 collect / collectLatest без repeatOnLifecycle / flowWithLifecycle
👉 runBlocking (особенно на UI)
👉 async { } без использования Deferred (исключения не будут перехвачены)
👉 Job / SupervisorJob / CoroutineScope без .cancel() в onCleared/onDestroy
👉 захардкоженные Dispatchers.IO/Main/Default

Доступны quick-fix (Alt+Enter). Если код находится внутри ViewModel, плагин автоматически подставляет viewModelScope. В Fragment/Activity — lifecycleScope или оборачивает collect в repeatOnLifecycle(STARTED).

Пока плагина нет в Marketplace. Установка выполняется через Gradle:
// сборка плагина, он появится в build/distributions/
./gradlew buildPlugin
// затем установить плагин через интерфейс IDE


Идея хорошая, но остался один вопрос: почему именно IDE-плагин? Нельзя ли было реализовать проверки через Android Lint или использовать другой анализатор? Тем более что с ИИ сейчас это можно сделать эффективно, а от IDE я уже совсем отошёл.

#Kotlin #Coroutines #AndroidStudio #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32👎134❤3
🚀 Вышел стабильный Jetpack Glance 1.2.0: превью виджета из композиции и альфа у картинок

Jetpack Glance - библиотека для разработки с Android Desktop Widget и Wear Tile на Compose


Glance 1.2.0 вышел 26 августа 2026. С релиза 1.1 прошло больше года, в stable доехало то, что жили в альфе с мая 2025 🤯

Главное для виджетов на домашнем экране - генерация превью на Android 15+. Переопределяешь GlanceAppWidget.providePreview, публикуешь через GlanceAppWidgetManager.setWidgetPreviews. Композиция одноразовая, без рекомпозиции и эффектов. На более старых версиях по-прежнему статическое превью.

Что еще нового:
👉 alpha у Image (0f..1f)
👉 MultiProcessGlanceAppWidget, если ресиверы живут в разных процессах
👉 лямбды больше не experimental
👉 previewSize у requestPinGlanceAppWidget
👉 повысили minSdk до Android 6.0 (API level 23)

Legacy glance-wear-tiles deprecated в пользу androidx.glance.wear.

#Android #AndroidDev #Compose #AppWidgets #AndroidJetpack #WearOS
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Jetpack PDF вышел в Beta. Встраиваемый PDF в Android приложении уже можно пробовать

Google довёл Jetpack PDF до беты. Это не обёртка над PdfRenderer, а готовый вьюер внутри своего UI: открыть документ, зум/скролл, поиск, выделение текста, стилус, двухстраничный режим на планшете, клавиатура и мышь.

Точка входа: PdfViewerFragment. Рядом Compose`PdfViewer` и PdfViewerState, но они ещё за @ExperimentalPdfApi.

Редактирование тоже есть, и это главная причина смотреть библиотеку сейчас, а не через полгода. EditablePdfViewerFragment даёт аннотации (перо, маркер, ластик, undo/redo через androidx.ink), заполнение форм и запись правок через PdfWriteHandle. Есть распознование данных (OCR)

// просмотр + правки (experimental)
@OptIn(ExperimentalPdfApi::class)
class EditorFragment : EditablePdfViewerFragment()

// включить перо / маркер / формы
fragment.isEditModeEnabled = true

// сохранить драфт в файл
lifecycleScope.launch {
fragment.applyDraftEdits().use { handle ->
handle.writeTo(outputPfd)
}
}


Рендер и чтение бэкпортировали до minSdk 28 (Android 9.0)

Бета релиз значит публичные API просмотра зафиксировали, в прод можно тащить аккуратно. Теперь можно пробовать отказаться от коммерческих решений на замену стандартного решения, только вот minSdk не всем может позволить

🔗 Релизные заметки
🔗 Как встроить в приложение

#Android #AndroidDev #AndroidJetpack #PDF
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 В Jetpack Emoji2 1.7.0 (пока только первая альфа) решили сделать перфоманс релиз!

Что уже сделали:
👉 размер метаданных: ~2.2 MB → ~80 KB
👉 аллокации на старте: 24 178 → 82
👉 ускорили сканирование доступных эмоджи

В прод тащить НЕ стоит. Имеет смысл смотреть, если профилируешь старт или видишь emoji2 в памяти.

#Android #AndroidDev #AndroidJetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 В Android 17 закрыли уязвимости в безопасности ОС. Обновитесь до OkHttp 5.5 или новее

1. Encrypted Client Hello: сеть больше не видит, на какой домен вы переходите
HTTPS шифрует содержимое запроса. Но в самом начале TLS-рукопожатия телефон всё ещё сообщает серверу имя сайта в открытом виде. Это поле называется SNI (Server Name Indication). Оператору, офисному прокси и тому, кто слушает Wi-Fi, тело письма не видно, а адрес получателя виден. По нему собирают профиль и целят фишинг.

ECH (Encrypted Client Hello) как раз шифрует это имя с первого запроса. Вместе с Private DNS наблюдатель видит IP, но не домен. Работает только если сетевой стек приложения поддерживает ECH и сервер отдаёт конфиг в HTTPS-записи DNS. Иначе клиент шлёт заглушку GREASE, защиты нет.

Google просит обновиться на OkHttp 5.5.0 и включить ECH. В Network Security Config XML появился <domainEncryption> для всей базы или для конкретного домена. HttpEngine / WebView должны подтянуть платформенные API сами.

2. Local Network Protection форсируется
Для приложений с targetSdk 37 локальная сеть будет закрыта по умолчанию. Раньше любое приложение с INTERNET могло просканировать домашнюю Wi-Fi и увидеть устройства. Теперь же потребуется запросить новое runtime permission ACCESS_LOCAL_NETWORK. Без него TCP-соединения в LAN уходят в таймаут, UDP возвращает EPERM. Касается сокетов, OkHttp, Cronet, mDNS, .local.

Легаси-формат с INTERNET и при target < 37 или на старых версиях ОС останется работать как было.

3. Certificate Transparency по умолчанию
Публичные сертификаты должны быть в открытых CT-логах. Если центр сертификации скомпрометировали и выпустили фейковый сертификат «как у банка», это станет сложнее спрятать. Для обычного приложения это «просто заработало», пока вы не используете собственный CA или кривой прокси.

4. 2G выключает оператор, и это про SMS-бластеры
С Android 12 пользователь мог выключить 2G вручную (рекомендую сделать). В 17 это может сделать оператор по умолчанию для своих абонентов. К API приложения это не относится, но объясняет, зачем фича вообще есть. В 2G есть уязвимости, но никто не собирается их латать из-за устаревания стандарта.

Из четырёх пунктов прямо сейчас ломает продукт только локальная сеть. ECH даёт пользу, когда обновили клиент и бэкенд. Остальное фоном.

🔗 Источник - блог Google

#Android #Android17 #Security #Privacy
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Кирилл Розов
📹 Режим экономии памяти в Android или реально нужны перемены в Google Play? Делюсь своим мнение и рассказываю что нас ждет дальше в новом видео на YouTube

#Android #GooglePlay
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 AndroidX Security State 1.1.0 стал стабильным

Вышел первый стабильный androidx.security:security-state:1.1.0 (1.0 дошел только до Beta) и security-state-provider:1.0.0

Библиотека отвечает на вопрос на каком patch level сейчас живут разные куски ОС и закрыт ли конкретный CVE.

После Mainline / APEX одного Build.VERSION.SECURITY_PATCH мало. Система, vendor, ядро и модули обновляются отдельно. В API 35 платформенный SecurityStateManager уже умеет проверять это. AndroidX даёт compat API и дополнения для проверки установленных пачтей безопасности, закрыты ли известные уязвимости и доступны для них фиксы уже на целевом устройстве.

val state = SecurityPatchState(context)

val systemSpl =
state.getDeviceSecurityPatchLevel(SecurityPatchState.COMPONENT_SYSTEM)

// bulletinJson скачиваете самостоятельно
state.loadVulnerabilityReport(bulletinJson)
val patched = state.areCvesPatched(listOf("CVE-2024-0031"))
val upToDate = state.isDeviceFullyUpdated()

val pending = state.queryAllAvailableUpdates(timeoutMillis = 5_000)


Кому это реально нужно? MDM, банки, приложения с высокими требованиями безопасности. В обычное приложение тащить незачем.

#Android #AndroidDev #Jetpack #Security
Please open Telegram to view this post
VIEW IN TELEGRAM