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

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
🤖 Демонстрация on-device AI в новом open source примере Google

🐱 Jetpacker — это новый пример от команды Android, созданный для демонстрации возможностей AI на устройстве и в облаке.

Что сделано:
👉 Суммаризация информации о маршруте (Trip overview): Преобразует длинное описание маршрута в краткую сводку. Использует Gemini Nano через ML Kit GenAI APIs.
👉 Управление расходами (Expense tracker): Автоматически извлекает структурированные данные (суммы, категории) из фотографий чеков. Использует мультимодальный Gemini Nano 4 через ML Kit.
👉 Аудиодневник (Audio diary): Записывает, транскрибирует и категоризирует голосовые заметки. Работает на ML Kit Speech Recognition и GenAI Prompt APIs.
👉 Системная интеграция с AppFunctions API: Интегрирует возможности приложения с системным ИИ Android (например, позволяет Google Assistant выполнять действия внутри приложения). Подробности в отдельной статье.

#Android #AI #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Гайды по адаптации Android-приложений под широкие раскладушки (Galaxy Fold8) и трифолды на официальном сайте освещают различные аспекты адаптации:

👉 Работу с Window Size Classes
👉 Уровни (Tier) адаптации приложения. Их всего 3, и выполнить уровни 1 и 2 несложно.
👉 Какие изменения конфигурации могут вызываться, но вы для смартфонов на них забивали.
👉 Поддержка смены ориентации (а планшеты и fold-ы вертят часто).
🚀 Готовность Android Jetpack библиотек.

Помните, что с Android 17 все приложения на планшетах будут растягиваться, игнорируя все ограничения в манифесте вашего приложения!


#Android #Foldable #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
🐱 DebugOverlayAndroid-библиотека для отображения оверлея загрузки ресурсов устройства при работе приложения.

Интересная функция Bug Report: одной кнопкой собирается ZIP-архив с интерактивным HTML-дашбордом, скриншотом, логами, сетевой историей и списком падений. Для QA есть OverlayMode.BugReporterOnly (только FAB для репортов, метрики не мешают тестированию) и Hidden, когда панель вызывается из собственного меню отладки через DebugOverlay.openPanel(context). Это решает вечную проблему «воспроизвёл, но к тикету приложить нечего».

‼️ Логи и тела запросов попадают в отчёт как есть. Редактирование заголовков и лимит размера тела настраиваются в interceptor, но по умолчанию удаляются только типовые ключи Authorization.

Автор не позиционирует это как замену профайлеру. Для internal- и debug-сборок мне такой формат нравится больше, чем поднимать Profiler на каждый чих.

#Android #AndroidDev #Tooling #OpenSource
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯 В США впервые судят человека за то, что его телефон стёр сам себя. Помогла GrapheneOS

24 января 2025, аэропорт Атланты. Гражданин США Сэмюэл Таник возвращается из-за границы и попадает на вторичный досмотр. Формально ему говорят, что ищут запрещённый контент. Защита утверждает, что интересовала его связь с движением Defend the Atlanta Forest, которое выступает против стройки полицейского учебного центра, известного как Cop City. Ордера нет: агенты объясняют, что границу он ещё не пересёк, а значит и ордер не нужен. По ходатайству защиты, к адвокату его не пустили и права не зачитали.

Таник называет пароль. Агент вводит его сам, экран гаснет, мигает несколько раз, телефон уходит в перезагрузку и оживает пустым. Это был duress-пароль — вторая комбинация в GrapheneOS, которая вместо разблокировки уничтожает ключи шифрования. Необратимо, за секунды, аппарат становится как с завода. Фича появилась в 2024 ровно под такой сценарий. Пустой телефон изъяли всё равно, а Таника пропустили в страну.

Обвинение прилетело позже: 18 U.S.C. § 2232 — осознанное уничтожение имущества, чтобы помешать его изъятию. Статья редкая, защитники и безопасники говорят, что в таком виде видят её впервые. Вину Таник не признал, решение по ходатайству ждут до конца года.

Юридически всё держится на одном слове — «осознанно» 💥 Сам он ничего не нажимал, код ввели агенты. Вопрос суда: считать ли «назвал пароль, зная, что будет» уничтожением данных. Если докажут умысел, статья ложится.

Что здесь по-настоящему неприятно. Фича отработала идеально и именно поэтому стала уликой. Годами мы строили инструменты, которые защищают данные от взлома, а риск переехал в другое место: не в то, что защиту сломают, а в то, что за факт её использования тебе выпишут статью. Модель угроз в документации заканчивается там, где начинается протокол задержания.

Честная оговорка: что было на том телефоне, мы не знаем. Не исключено, что он вполне сознательно выбрал меньшее зло и § 2232 дешевле того, что нашли бы внутри. На инженерный вывод это не влияет.

📹 Смотрите мой обзор на GrapheneOS
🔗 Источник новости

#Android #GrapheneOS #Безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔐 GrapheneOS ответила на дело о стёртом телефоне и между строк призналась, что стирать было не обязательно

Продолжение вчерашней истории про активиста, чей Pixel обнулился прямо в руках офицера.

Публичная часть ответа предсказуемая. Команда заявила, что ОС полностью легальна, ослаблять свои механизмы защиты они не обязаны, а законы, которые потребовали бы это сделать, были бы неконституционными. Отдельно уточнили, что помочь американским силовикам восстановить данные с того телефона не могут физически: железо и софт спроектированы так, чтобы обойти шифрование было нельзя.

Интереснее то, что параллельно опубликовал GrapheneOS Foundation. Фонд выкатил разбор своих защит от извлечения данных из заблокированных устройств и довольно прозрачно намекает: телефон на GrapheneOS переживает досмотр и без duress-пароля. А следом идёт прямая оговорка, что стирание данных в некоторых случаях может повлечь юридические последствия 💥 То есть ровно тезис вчерашнего поста, только теперь его пишут сами авторы фичи.

Что предлагается вместо? Ключевая штука это авто-ребут: таймер стартует при блокировке и перезагружает аппарат, если до нуля его так и не разблокировали. По умолчанию 18 часов, настраивается в диапазоне от 10 минут до 72 часов, разблокировка любого профиля таймер сбрасывает. Реализован в init, так что уронить system_server и сорвать перезагрузку не выйдет. Цель в том, чтобы вернуть телефон в состояние Before First Unlock, где ключей в памяти нет и коммерческие форензик-комбайны резко теряют в эффективности. Ничего не уничтожено, вменять нечего, данные просто лежат зашифрованными.

С 2025 Google завезла авто-рестарт через Play services. Только фиксированные 72 часа и без единой настройки.


Вывод для инженера скучный и рабочий: лучшая защита на границе не та, что эффектно уничтожает данные, а та, что спрячет их и не даёт повода для уголовной статьи 🎯

#Android #GrapheneOS #Pixel #Security
🤖 Что-то пошло не так... Google выпустила новую версию Jetpack Loader, API для загрузки данных из 2012 😳

#Android #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Kimi K3, GPT 5.6, Qwen3.8 Max и OPUS 5 добавили в результаты официального AI Android Бенчмарка

Как поменялся рейтинг?
🏆 Claude Opus 5 новый лидер с результатов 91.8%. Прошлый лидер Fable 5 был с результатов 90.9%. По цене Opus вышел дороже
🥉 GPT 5.6 Sol попал на 3 строку с результатом 90.8%
‼️ На 4 месте расположился Kimi K3 с результатов 90.2%
👉 GPT 5.6 Luna показала результат 86.8% но при этом стоимость указана 7.2$ 🤯 (кажется тут закралась ошибка все верно и это шок по эффективности)
👉 GPT 5.6 Terra набрала 86.8% потратив 48$, что сейчас точно является лучшим показателем в соотношение результата на затраченный 1$.
🤔 Qwen3.8 Max
показал достойные 87.0% но при этом потратил больше всех моделей - 196.7$

Бенчмарк все также игнорирует Grok и Compose модели 😡 Что-то не так в отношениях между компаниями Google и Илоном - загадка

UPD Kimi K3 не считается открытой моделью, что неверно. Изначально веса были закрыты и потом открываются. Видно в бенч попадают данные на момент запуска проверки модели.

#AI #Android #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Обновление AndroidX Fragment

Вышел androidx.fragment:fragment-*:1.9.0.

Три изменения, которые реально заметны:
👉 Fragment теперь реализует ContextAware. Можно повесить OnContextAvailableListener и выполнить код в момент, когда контекст стал доступен (аналог того, что давно есть у Activity).

👉 У composable AndroidFragment {} появился параметр maxLifecycle. Можно жёстко ограничить lifecycle вложенного фрагмента — удобно в пейджерах, табах и других сложных UI, где не хочется, чтобы offscreen-фрагмент уезжал в RESUMED.

👉 Добавили system tracing lifecycle-событий через Jetpack Tracing. В Perfetto теперь видно, что происходит с фрагментами.

Плюс куча фиксов predictive back и setMaxLifecycle + popBackStack, которые тянулись с 1.8.x.

Если живёте на Fragment + Compose interop — обновляться имеет смысл. Чистый Compose-проект может спокойно пропустить.

#Android #AndroidDev #Jetpack #Fragment
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Вышел AndroidX WebKit 1.17.0 — обновленная навигация и контроль над кэшем

Самое полезное в новом минорном релизе:
👉 WebViewCompat.navigate наконец-то нормальная замена loadUrl. Можно заменять страницу в истории, получать объект Navigation и корректно сохранять/восстанавливать заголовки. Для приложений, где WebView — не просто «открыть ссылку», а нормальный флоу, это давно было нужно.

if (WebViewFeature.isFeatureSupported(WebViewFeature.WEBVIEW_NAVIGATE_EXPERIMENTAL_V1)) {
val params = NavigationParameters.Builder()
.setShouldReplaceCurrentEntry(true) // заменяет текущую запись в истории
.addAdditionalHeader("X-Custom-Header", "value")
.build()

val navigation: Navigation
= WebViewCompat.navigate(webView, "https://example.com", params)

// navigation можно потом матчить в NavigationListener
}


👉 Контроль HTTP-кэша через Profile.getHttpCache. Можно посмотреть квоту и при необходимости подкрутить. Полезно, если много статики, или наоборот — когда кэш только место жрёт.

if (WebViewFeature.isFeatureSupported(WebViewFeature.HTTP_CACHE_MANAGER)) {
val profile = ProfileStore.getInstance().getOrCreateProfile("my_profile")
val httpCache = profile.httpCache // или profile.getHttpCache()

// Посмотреть текущую квоту
val currentQuota = httpCache.quotaBytes
val defaultQuota = httpCache.defaultQuotaBytes
val isDefault = httpCache.isUsingDefaultQuota

// Задать свою квоту (например, 50 МБ)
httpCache.setQuotaBytes(50L * 1024 * 1024)

// Или вернуть автоматическое управление
// httpCache.useDefaultQuota()
}


👉enqueuePreconnect — можно заранее поставить preconnect в очередь, не заставляя WebView стартовать прямо сейчас.

👉 Можно отключить автоматическую загрузку фавиконок (setDownloadFaviconsEnabled). Мелочь, но экономит память и трафик, особенно если иконок много.

👉 Плюс Android Lint, который теперь ругается, если кастомный WebViewClient не переопределил onRenderProcessGone. Полезно, потому рендерер падает регулярно.

🔗 Подробности релиза

#Android #AndroidDev #WebView #AndroidJetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🐱 DI Yatagan 2.0.0 RC: можно попробовать без переписывания Dagger-вызовов

Яндекс выкатил первый мажор своего DI-фреймворка. Основное:

👉 Единый backend-agnostic Yatagan entry point в api-public. Reflection или codegen подхватываются автоматически, имплементация с генерацией кода имеет приоритет.

👉 Экспериментальный Dagger compatibility mode. Включаешь yatagan.experimental.enableDaggerCompatibility и Yatagan генерит DaggerMyComponent фасады. Старые DaggerMyComponent.create() / .builder() продолжают работать. Поддерживается ядро (components, modules, scopes, multibindings, assisted), без Hilt/Android/producers.

👉 Conditions API почистили: legacy @Condition/@AnyCondition deprecated в пользу @ConditionExpression, @Provides(Conditional(...)) → отдельный @Conditional на методе.

👉 Runtime-конфиг стал declarative (processor options + parameters.properties), убрали глобальный mutable state.

Есть подробный migration guide и даже скилл для агента:
npx skills add yandex/yatagan

Это RC. Compatibility mode экспериментальный — граф лучше провалидировать. Но для тех, кто уже страдает от Dagger на больших проектах и смотрел в сторону Yatagan, порог входа заметно снизился.

🔗 Release Notes

#Android #AndroidDev #DI #Яндекс
Please open Telegram to view this post
VIEW IN 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
🤖 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
🤖 Лимиты памяти на приложение раскатывают на большее кол-во устройств с 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
🐱 Плагин, который ловит типичные утечки прямо в 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/ActivitylifecycleScope или оборачивает 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
🚀 Вышел стабильный 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