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

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
🚀 Google взялась за упрощение Picture‑in‑Picture

PiP на Android долго был зоопарком: разный API на версиях, разный UI‑стейт, много if (SDK_INT…) и бойлерплейта. Новая Jetpack‑библиотека androidx.core:core-pip как раз и создана, чтобы это спрятать: она выравнивает вызовы PiP между версиями Android, даёт единый способ задавать параметры (особенно для видео/плееров), объединяет разрозненные колбэки состояния PiP и уменьшает количество кода за счёт готовых пресетов действий для типовых сценариев.

Требования: обновляем Activity

Чтобы всё это заработало, мало просто подключить core-pip — нужно обновиться до свежей Activity 1.13.0 (пока в альфе). В этой версии есть новые API для отслеживания состояния PiP (PictureInPictureUiStateCompat и слушатели), на которых удобно строить логику поведения UI, когда окно уходит в PiP или, например, «прячется» в угол.

// Пример кода: реагируем на состояние PiP
class PlayerActivity : ComponentActivity() {

private val pipUiStateListener =
Consumer<PictureInPictureUiStateCompat> { state ->
if (state.isStashed) {
/* спрятать контролы плеера */
} else {
/* показать контролы плеера */
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// ... инициализация UI / плеера ...
addOnPictureInPictureUiStateChangedListener(pipUiStateListener)
}

override fun onDestroy() {
removeOnPictureInPictureUiStateChangedListener(pipUiStateListener)
super.onDestroy()
}
}

🔗 Подробности про библиотека в документации

#Android #AndroidDev #AndroidJetpack #PIP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍45🔥10👎61
🤖 Разница между Permission и Ability в Android ОС

Чтобы получить доступ к пользовательским данным или сенсорам, разработчику приходится работать с механизмом разрешений (permissions): пользователь должен выдать приложению право на использование соответствующего ресурса. Однако наличие Permission не гарантирует, что приложение действительно сможет получить эти данные.

Например, приложению выдали доступ к геолокации, и формально оно имеет право узнать, где находится пользователь. Но при запросе локации приложение получает null. Почему?

Здесь и появляется понятие Ability — фактическая возможность получить данные в текущий момент времени. И она может отсутствовать даже при наличии разрешения.

Причин может быть множество:
👉 пользователь отключил геолокацию через быстрые настройки;
👉 система временно приостановила доступ (например, в режиме энергосбережения);
👉 прошивка вендора ограничила работу сенсора;
👉 администратор устройства запретил доступ к геолокации;
👉 отсутствует физический сигнал (GPS недоступен, нет сети и т.д.).

Итог: Permission — это юридическое право, Ability — это реальная техническая возможность.

С точки зрения архитектуры, наличие permission не должно рассматриваться как гарантия наличия данных. Бизнес-логика и use case’ы должны быть спроектированы так, чтобы корректно работать в ситуации отсутствия ability.

Другими словами: приложение должно быть готово к тому, что внешний мир в любой момент может стать недоступным — даже если формально все разрешения выданы. Это означает:
1️⃣ отсутствие жёстких предположений о доступности данных;
2️⃣ обработку null, ошибок и таймаутов как нормального сценария;
3️⃣ явное моделирование состояний «данные недоступны» в доменной модели.

Permission — это контракт с пользователем. Ability — это контракт с реальностью. И именно второй чаще всего нарушается.

#AndroidDev #AndroidOS #Архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9111👎8🤔3🔥2
🤖 Android Gradle Plugin 9 упрощает запуск unit-тестов

По умолчанию Android Gradle Plugin создаёт Gradle-задачи для запуска unit-тестов во всех доступных build types, что на практике почти никогда не нужно. Обычно тесты запускаются только для debug-сборки.

В реальных проектах (особенно с product flavors и большим количеством модулей) это приводит к сотням лишних задач, увеличению времени конфигурации и дополнительной нагрузке на IDE и CI.

Чтобы оптимизировать работу Gradle, начиная с AGP 9.0, можно в gradle.properties добавить:
android.onlyEnableUnitTestForTheTestedBuildType=true


После этого unit-тесты будут генерироваться только для основного тестируемого build type (как правило, debug). Это:
👉 убирает лишние Gradle-задачи;
👉 сокращает время конфигурации проекта;
👉 снижает потребление памяти;
👉 ускоряет локальную разработку и CI-пайплайны.

Если вы не запускаете unit-тесты для release-сборок (а так делают почти все), то включение этого флага — бесплатная оптимизация сборочной инфраструктуры.

Это хороший пример того, как дефолтные настройки инструментов ориентированы на универсальность, а не на эффективность, и почему их стоит регулярно пересматривать в контексте реальной архитектуры проекта.

#Android #AndroidDev #Gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46👎32🔥1👏1
Android Broadcast
🤖 Посмотрел на обновлённую статистику распространения версий Android на 1 декабря 2025 и вот что интересно. 📈 Android 16 набирает обороты быстрее предшественников За два месяца после релиза Android 16 (API 36) уже захватил 7,5% рынка. Для сравнения, Android…
Android 9 (API 28) сегодня — это более 95% всех активных Android‑устройств в мире. Повышение minSdkVersion до этого уровня открывает доступ к новым платформенным API, среди которых особенно интересен AppComponentFactory.

AppComponentFactory позволяет задать фабрику, которая будет управлять созданием экземпляров Application, Activity, Service, ContentProvider и BroadcastReceiver. Благодаря этому можно использовать конструкторы с параметрами для этих компонентов и отказаться от полевого инжекта (field injection) или других обходных путей, вызванных ограничениями старых версий Android.


// Создаем свою фабрику
class MyAppComponentFactory : AppComponentFactory() {

override fun instantiateActivity(
cl: ClassLoader,
className: String,
intent: Intent
): Activity {
return when (className) {
MainActivity::class.java.name ->
MainActivity("Hello from factory")
else ->
super.instantiateActivity(cl, className, intent)
}
}
}
``

<!-- Указываем фабрику в манифесте -->
<application
android:name=".MyApplication"
android:appComponentFactory=".MyAppComponentFactory"
... >
...
</application>

// Используем в Activity конструктор с параметром
class MainActivity(private val message: String) : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
println("Message from factory: $message")
}
}


#Android #AndroidDev #Android9
74👍16👎14🤔3🔥2
🤖 Очередная порция ограничений для Activity в Android 17

Копался в behavior changes для Android 17 и наткнулся на очередное закручивание гаек вокруг запуска Activity из фона.

На этот раз Google расширил BAL (Background Activity Launch) ограничения на IntentSender

IntentSender - это обёртка над PendingIntent, позволяющая передать право запуска Intent другому приложению или системе. Именно через него работают уведомления, виджеты, shortcuts и межпроцессные вызовы.


Так вот, константа MODE_BACKGROUND_ACTIVITY_START_ALLOWED теперь deprecated. Если где-то передаёте её через ActivityOptions при работе с PendingIntent — нужно мигрировать на MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE. Разница в том, что теперь Activity из фона запустится только если вызывающее приложение видимо пользователю.

val options = ActivityOptions.makeBasic().apply {
pendingIntentBackgroundActivityStartMode =
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE
}


Найти проблемные места просто — Google обновил lint и StrictMode под новые требования. Запускаете lint, ищете использования MODE_BACKGROUND_ACTIVITY_START_ALLOWED и получаете полный список того, что нужно поправить.

Формально это касается только targetSdk 17+, но лучше не тянуть — сами знаете, как работают дедлайны в Play Console.

🔗 Источник developer.android.com

#Android17 #androiddev #security #activity
Please open Telegram to view this post
VIEW IN TELEGRAM
👎20👍14👌73🤯3
🤖 Вышел Coil 3.4.0

Coil - это библиотека для загрузки изображений на Android (и теперь Compose Multiplatform). Название расшифровывается как Coroutine Image Loader — библиотека написана на Kotlin с первого дня и отлично вписывается в современный стек: корутины, Compose, KMP.


В новой версии несколько интересных вещей:

🔁 ConcurrentRequestStrategy — теперь можно объединять параллельные сетевые запросы на один и тот же ресурс. По умолчанию отключено и помечено как экспериментальное, но идея хорошая — вместо N одинаковых запросов летит один, остальные ждут результата.

🧵 Асинхронный декодинг JS/WASM — изображения больше не блокируют главный поток браузера. Важно для KMP-проектов с вебом.

🐧 Linux targets — добавили поддержку linuxX64 и linuxArm64 для non-Compose артефактов.

🎞 Улучшенные переходы в Compose — новый useExistingImageAsPlaceholder позволяет плавно переходить от предыдущего изображения, когда нет placeholder. Мелочь, но визуально приятно.

🎬 Embedded video thumbnails — поддержка встроенных превью для видео.

🔧 coil-lint — добавили Android Lint-правило, которое ловит случайные вызовы kotlin.error() внутри блоков ImageRequest.Builder. Неожиданно полезно.

Зависимости Kotlin 2.3.10, Compose 1.9.3, Okio 3.16.4.

#Android #AndroidDev #KMP #kCMP #Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40👎54🔥1👏1🤔1👌1
🤖 Google анонсировали Automated Prompt Optimization (далее APO) для Vertex AI. Это будет полезно всем тем кто работает с on-device AI на Android

Если вы ещё не слышали про ML Kit Prompt API — это способ запускать Gemini Nano прямо на Android устройстве без обращения к серверу. Модель живёт в Android AICore как системный сервис, приложение просто отправляет промпт и получает ответ.

APO появился с целью настройки общей модели под конкретную задачу. Это облачный инструмент, который автоматически ищет оптимальный системный промпт для вашей задачи. Вы даёте примеры входных данных и ожидаемых ответов, Gemini Pro/Flash анализирует ошибки, генерирует десятки вариантов промптов параллельно и выбирает лучший. На выходе — просто текст промпта, который вы зашиваете в своё приложение.

Google утверждают, что это даёт📈 +5–8% к точности на реальных задачах: классификация, перевод, определения намерения.

Пока ML Kit Prompt API доступен только на ограниченном числе устройств, но направление очевидно — Google всерьёз строят экосистему on-device AI для Android-разработчиков

🔗 Источник - официальный блог Android Developers

#Android #AndroidDev #MLKit #GeminiNano #OnDeviceAI
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👎18👍9🤔75👌1
🤯 Конец Android View ближе чем кажется - в будущей версии Android Studio убирают поддержку превью для Custom View.

Источник - сайт Android Developers

#Android #AndroidDev #Compose #AndroidStudio
🤯103👎46🎉25👍17🔥13👌1
🚀 Появился Android бенчмарк LLM от Google

Давно пора было, чтобы кто-то взялся за оценку LLM системно. Вопрос "какая модель лучше пишет Android-код" висел в воздухе, и каждый отвечал на него субъективно или на основе личных впечатлений и умений.

Общие тесты, публикуемые при выходе модели, не говорят ничего про то, умеет ли модель разобраться в реальных задачах Android разработки. Android Bench закрывает именно этот пробел.

Задачи взяты из реальных публичных Android-репозиториев на GitHub — никакой синтетики, разного уровня сложности. Модель должна самостоятельно починить проблему, а результат проверяется через unit или instrumentation-тесты. Никакой субъективщины — только прогон тестов.

Модели справились только с 16–72% задач. Разброс огромный и показывает, где пропасть между разными моделями.

🔗 Подробности про Android Bench
🐱 GitHub репо Android Bench
🔗 Источник - блог Android Developers

#Android #AndroidDev #Benchmark #AI #ИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
👎19👍83🔥3
🤯 Неожиданно по всем бенчмаркам побеждает Gemini модель. В тесте надо разбираться и понимать какая настройка давалась моделям, но почему-то сразу ощущается подкручивание результатов в пользу своих моделей.

💬 Как вы оцениваете результаты?

#Android #AndroidDev #Benchmark #AI #ИИ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🤯16👎8🤔2
🤖 Snapdragon Wear Elite — новый чип для носимых устройств

На MWC 2026 Qualcomm анонсировала Snapdragon Wear Elite — первый чип серии Elite для носимых устройств. И это реально большое обновление на бумаге.

Чип сделан по 3нм техпроцессу. По сравнению с предыдущим Snapdragon W5+ Gen 2:
🚀 5x быстрее по CPU
🚀 7x быстрее по GPU
🔋 +30% к времени работы от батареи
⚡️зарядка до 50% всего за 10 минут

Главная фишка — впервые в носимых появился выделенный Hexagon NPU с поддержкой моделей до 2B параметров прямо на устройстве 🤯

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

Первые устройства ждём уже через несколько месяцев. Интересно, будет ли это заметно в реальном использовании или снова всё утонет в маркетинге AI-фич, а их работа приведет к быстрому сгоранию заряда батарейки на устройстве.

#Android #AndroidDev #WearOS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34👎9🔥53🤯2👌1
🤖 AndroidX Tracing 2.0 — поддержка Desktop JVM и Kotlin Coroutines

AndroidX Tracing — это библиотека для добавления данных в код, которая позволяет видеть что происходит внутри приложения в профилировщиках вроде Perfetto и Android Studio.


До версии 2.0 она была завязана исключительно на android.os.Trace — то есть работала только на Android. Теперь всё изменилось.

Версия 2.0 полностью пересматривает подход:
👉 Поддержка Desktop JVM — трейсинг теперь работает не только на Android, но и на обычной JVM. Это открывает возможность профилировать host-инструменты, Gradle-таски и shared-код в KMP-проектах.
👉 Propagation для корутин — классическая проблема: suspend-функции разрывали трейс на несвязанные куски и было непонятно что к чему относится. Теперь traceCoroutine() прокидывает контекст трейса через корутины автоматически.
👉 Метаданные в слайсах — к каждому трейс-событию можно прикрепить аргументы. Видишь слайс в Perfetto и сразу понимаешь с какими параметрами он вызван.
👉 Новый формат — Perfetto trace — трейсы совместимы с Android Studio и Perfetto UI из коробки.

Новый API выглядит так:

val driver = TraceDriver(sink = TraceSink(
sequenceId = 1,
directory = File("/tmp/perfetto")
), isEnabled = true)

driver.use {
driver.tracer.trace(category = CATEGORY_MAIN, name = "my_operation") {
// твой код
}
}


⚠️ Пока это только alpha и многих привычных возможностей нету, но будут к релизу Stable версии.

#Android #AndroidDev #KMP #AndroidX #Производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24👎6🔥63🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 Как уменьшить задержку воспроизведения видео? Решение есть в AndroidX Media3

Одна из задач при скролле контента в ленте - убрать задержку показа/воспроизведения контента, чтобы у пользователя не было ожидания или оно было минимальным (при условии стабильного интернет соединения).

Для более быстрого старта воспроизведения видео стоит использовать Preload API в ExoPlayer из Jetpack Media 3. В посте приложил демонстрацию как это реально уменьшает задержку старта воспроизведения.

🔗 Опытом адаптации PreloadManager в приложение поделились в статье
🔗 Руководство по интеграции PreloadManager в документации

* Instagram признан экстремистcкой организацией на территории Российской Федерации

#Android #AndroidDev #ExoPlayer
Please open Telegram to view this post
VIEW IN TELEGRAM
37👍17👎7🔥7🤯2
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 Google объявила о полноценной поддержке внешних дисплеев в Android (также нужна поддержка со стороны устройства)

Я попробовал подключить Pixel 9 Pro к внешнему 4K монитору по Type-C. Итог - зернистость такая, что пользоваться невозможно. В настройках выбрать выше FullHD не дает (возможно, ограничение моего устройства). Приложения можно растягивать как угодно, что порой приводит к проблемам их отображения и они не перестраиваются полностью. Начало хорошее, но очень много работы с разработчиками по адаптации под больши экраны и ресайз на лету.

Google дала множества библиотек и руководств по адаптации под большие экраны, а также как работать с несколькими дисплеями.

🔗 Источник - Android Developers Blog

#Android #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40👍9👎65🤔2
🚀 Начали разработку Room 3.0, который станет полностью KMP-библиотекой с поддержкой JS и WASM, а также избавится от легаси.

Разработчики популярного ORM для Android и KMP решили выпустить мажорную версию, чтобы отразить всю важность изменений:
👉 Полный переход на androidx.sqlite driver API.
👉 Генерация кода будет только на Kotlin, никакой больше Java.
👉 APT и KAPT больше не будут поддерживаться. Остается только KSP.
👉 Room API теперь будет делаться в подходе "Kotlin Coroutines first", делая весь ORM асинхронным по умолчанию.

Что нас ждет из новых фичей и возможностей:
👉 Появится полноценная поддержка JS и WASM-таргетов.
👉 Можно будет добавить собственные возвращаемые типы в Room. Например, Room, RxJava, Paging и пр.

Новая версия Room будет выпущена под новым пакетом androidx.room3. Room 2.X не получит новых фичей, только багфиксы.

🔗 Источник - блог Android Developers.
🔗 Release Notes Room 3.0.0-alpha01

#Android #AndroidDev #Room #SQLite #Jetpack #AndroidJetpack #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥81👍20👎74🤯1
🤖 Google ускорила ядро Android, скормив компилятору профили реального использования

Команда LLVM toolchain в Google рассказала, как они применили AutoFDO (Automatic Feedback-Directed Optimization) к ядру Android — и результаты интересные.

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

Эта техника Google уже давно применяется к своей серверной инфраструктуре и ChromeOS, так что подход обкатанный и зарекомендовавший себя.

Кто знаком с ART Profiles — идея покажется знакомой. Там тот же принцип: собираем данные о реальном выполнении, отдаём компилятору, получаем более точный нативный код. Только ART Profiles работают на уровне ART для Java/Kotlin-кода конкретного приложения, а AutoFDO — на уровне ядра, C/C++ и LLVM. Разные слои, одна философия.

Для ядра профили собирают не с реальных устройств, а в лабораторных условиях: запускают топ-100 самых популярных приложений, используют simpleperf и аппаратные возможности ARM для записи истории ветвлений. Собранные данные показывают 85% совпадение с профилями реального парка устройств — этого достаточно, чтобы считать подход рабочим.

Результаты на ядрах 6.1, 6.6 и 6.12:
👉 холодный старт приложений стал быстрее на ~4%
👉 время загрузки сократилось на ~1%
👉 ядро занимает ~40% CPU-времени на Android, так что любая оптимизация здесь ощутима

Важный момент: AutoFDO не меняет логику кода, только влияет на решения компилятора — инлайнинг, раскладку кода. Функции, которые не попали в профили («холодные»), компилируются стандартным образом, без изменений.

Сейчас это уже в проде — профили включены в ветки android15-6.6 и android16-6.12, так что устройства на этих ядрах уже собираются с AutoFDO. Pixel-устройства точно попадают в эту категорию. С другими производителями сложнее: многие используют сильно модифицированное ядро и не переходят на GKI из AOSP, так что там это может быть не применено вовсе. В планах — GKI-модули, вендорные модули через DDK и поддержка новых версий ядра.

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

#Android #AndroidDev #Производительность #LLVM #Native
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥47👍76👎4
🤖 Google опубликовал обновлённые дизайн-ресурсы для Android — и там есть кое-что полезное

Компания активно продвигает адаптацию Android-приложений под ноутбуки и десктопы, где управление происходит мышью и клавиатурой. Неудивительно, ведь скоро появится Android-ноутбук, есть Chromebook'и, да и телефоны уже давно предлагают подключать к большому монитору.

1️⃣ Появилось новое руководство по Desktop Experience. Это про то, как ваше приложение должно выглядеть и работать, когда пользователь запускает его в desktop-режиме. Там разобраны принципы компоновки под большие экраны, работа с курсором (включая кастомные иконки), windowing с header bar и подход к более высокой плотности информации в UI. Всё это логично вытекает из того, что Android всё активнее движется в сторону десктопа через функцию connected display.

2️⃣ Запустили Android Design Gallery — живой каталог с примерами хорошего дизайна под разные форм-факторы и паттерны UX. Обещают пополнять регулярно. Полезно хотя бы как источник вдохновения, когда застреваешь на том, как должен выглядеть адаптивный экран.

Честно говоря, руководство давно напрашивалось — адаптивная разработка под Android остаётся одним из самых недооценённых направлений. Большинство приложений на планшетах и десктопах до сих пор выглядят как растянутый телефон. Особенно что в Andorid 17 система будет игнорировать ограничения приложений на размеры окна и ориентацию, картина будет интересной.

🔗 Источник: Android Developers Blog

#Android #AndroidDev #Дизайн #UI
Please open Telegram to view this post
VIEW IN TELEGRAM
26👍10👎5🔥3