Самое интересное для разработчиков - AppFunctions. Это experimental preview API + Jetpack библиотека, которые позволяют приложению стать on-device MCP (Model Context Protocol) сервером. Агенты вроде Gemini смогут обращаться к функциям приложения через стандартный протокол, без скрейпинга UI. Для отладки выпустили тест-агент, для раннего выхода в production открыта форма early access.
По on-device моделям: ML Kit GenAI APIs теперь работают с Gemini Nano 4 (preview). Prefix Caching уже доступен — кеширует промежуточное состояние LLM для повторяющихся частей промпта, снижает время инференса. Structured Output API скоро - типизированные объекты на выходе вместо свободного текста.
Firebase AI Logic Hybrid Inference добавляет явный контроль маршрутизации — режимы
PREFER_ON_DEVICE, PREFER_CLOUD, ONLY_ON_DEVICE, ONLY_CLOUD прямо в коде. ADK for Android в первой версии позволяет строить multi-agent workflows с оркестрацией между on-device и cloud моделями.Ещё есть A2UI + Compose Renderer: агент "говорит UI", Compose рендерит ответ как нативные компоненты. Пока чистый эксперимент, но направление понятное. Вот для чего делается Compose BDUI
Меня больше всего интересует AppFunctions. MCP как стандарт уже работает в десктопных агентах, и Google принесла это на уровень ОС — правильное решение. Вопрос в том, насколько быстро экосистема это подхватит за пределами флагманских приложений и почему не подключать сервер к этому, я использовать интеграцию через приложение
🔗 Источник - Android Dev Blog
#Android #AndroidDev #GoogleIO #AI
Please open Telegram to view this post
VIEW IN TELEGRAM
👎61🔥10 5❤4👍4👏3
В ближайших постах я пройдусь по основам адаптивности интерфейса, а пока вы можете изучить:
👉 Обзор экосистемы адаптивности от Google для Android
👉 Build adaptive apps
👉 Критерии качества адаптивных приложений (3 уровня)
#Android #AndroidDev #UI #Foldable #Планшет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35👎7❤1
Keep rules из сторонних библиотек часто написаны с запасом: разработчик библиотеки не знает, как именно вы её используете, и кладёт широкое
-keep class com.library.** { *; }. R8 видит это и выключает оптимизацию для всего пакета, даже если вашему приложению нужны оттуда три класса. AGP 9.3.0-alpha05 добавил инструмент, который это наконец показывает с цифрами.Configuration Analyzer генерирует HTML-отчёт, в котором по каждому keep rule и по каждой библиотеке видны три метрики:
👉 Shrinking score - процент кода, доступного для удаления неиспользуемых классов и методов
👉 Optimization score - процент кода, доступного для инлайнинга, мёрджинга классов и прочих R8-оптимизаций
👉 Obfuscation score - процент кода, доступного для обфускации имён
Начиная с AGP 9.3.0-alpha05 отчёт генерируется автоматически в build/outputs/mapping/release/configanalyzer.html при каждом билде с квлюченной минификацией. Для AGP 9.2 и ниже нужно при запуске
./gradlew assembleRelease передать системный флаг com.android.tools.r8.dumpkeepradiushtmltodirectory с путём до папки куда сохранить отчет.Помимо широких правил анализатор выделяет ещё два типа мусора:
👉 unused rules, которые не матчат ни один класс в текущем билде (обычно появляются после рефакторинга)
👉 subsumed rules, когда одно широкое правило перекрывает другое и делает его бессмысленным.
‼️ ВАЖНО: требует R8 9.3.7-dev, который идёт в комплекте только с AGP 9.3.0-alpha05. Это ранняя alpha. На продакшн-сборки без тщательной проверки не стоит.
Это первый инструмент с конкретными цифрами по влиянию сторонних библиотек на R8. Раньше это была область догадок и ручного анализа mapping-файлов. Теперь можно прийти к мейнтейнеру с отчётом и показать: вот твоё правило, вот 35% заблокированной оптимизации у нас в проекте. Круто если такой отчет можно будет получить как XML/JSON чтобы встраивать в другие инструменты.
#Android #AndroidDev #R8 #Performance #agp #Произодвительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46👎3❤1
GridCells.Adaptive сам рассчитывает колонки под доступное пространство — ничего не нужно задавать вручную:
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 160.dp),
modifier = Modifier.fillMaxSize()
) {
items(list) { ItemCard(it) }
}
Но почти всегда забывают про пагинацию.
pageSize хардкодят, и это ломает всю адаптивность. На планшете с 4 колонками те же 20 элементов — это 5 строк. Пользователь упирается в конец страницы раньше чем успел проскроллить.Правильно — считать
pageSize от реального числа колонок:BoxWithConstraints {
val columns = (maxWidth / 160.dp)
.toInt().coerceAtLeast(1)
val rows = (maxHeight / 120.dp)
.toInt().coerceAtLeast(1)
val pageSize = columns * rows
val items = remember(pageSize) {
Pager(PagingConfig(pageSize = pageSize)) { MyPagingSource() }
}.flow.collectAsLazyPagingItems()
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 160.dp)
) {
items(items.itemCount) { ItemCard(items[it]) }
}
}На смартфоне выйдет ~10 элементов, на планшете ~30. Никаких магических чисел — только математика от реального пространства.
Самый хороший пример тут - галерея. Они показывают адаптивную сетку контента и имеет возможность настройки другого расположения элементов
🔗 Lazy lists and grids — Android Developers
#Compose #Android #AndroidDev #Ui #Adaptive #Адаптивность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54❤8👎7🎉3
#Android #AndroidDev #Производительность #Оптимизация
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37👎7❤1
В Android-разработке с помощью агентов есть конкретная проблема — инструменты разбросаны:
👉 Хочешь запустить эмулятор — avdmanager
👉 Поставить пакет SDK — sdkmanager
👉 Задеплоить APK — adb
👉 Получить версии зависимостей — отдельный запрос к Google Maven
👉 Получить актуальную информацию по гайдам — Web-поиск или Google Developer Knowledge API
Агент вынужден знать синтаксис каждого, склеивать их через shell-команды и угадывать правильные пути. Android CLI 1.0 — это единая точка входа, которая агрегирует всё это в один инструмент с предсказуемым интерфейсом.
Почему CLI, а не MCP-сервер? Вопрос разумный. Но ответ простой: CLI работает с любым агентом без дополнительной интеграции. Настроил инструмент один раз, и он работает с Gemini CLI, Codex, Antigravity, чем угодно. Никаких зависимостей от протокола, никакого выбора поставщика. Хочешь взять только часть — берёшь только её.
Конкретно для агентов в 1.0 есть три вещи, которые раньше было негде взять:
android init ставит android-cli skill с Android-контекстом, android skills add --all добавляет готовые паттерны под конкретные задачи: CameraX, Perfetto SQL, Adaptive UI, AppFunctions. Агент работает не вслепую.android screen capture --annotate делает скриншот с числовыми лейблами на каждом UI-элементе, android screen resolve переводит лейбл в координаты. android layout отдаёт дерево UI в JSON без скриншота вообще.Можно было бы сделать MCP. Он дал бы более тесную интеграцию, но CLI универсальнее и проще в поддержке с любой стороны инструмента, который должен работать везде — это правильное решение.
#Android #AndroidDev #GoogleIO
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33👎13🔥3❤1
Решил обновить 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
👍39 9👎4🎉3👏1
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
👎20👍17❤5 2
‼️ Каждый год 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
👍58❤6👎5
Стандартный Android Profiler показывает потоки. Не корутины. Kotlinx-coroutines-debug работает в unit-тестах, но не на реальном девайсе с живым UI. Яндекс Go сделали для этого отдельный инструмент.
Coroutine Tracer — плагин в их открытой библиотеке Demeter. Gradle-плагин на этапе сборки находит все launch/async через ASM и вставляет хук без единой правки в исходниках. В рантайме хук перехватывает возвращённый Job, регистрирует invokeOnCompletion и всё отображается как интерактивное дерево прямо на девайсе.Два технических момента, которые зацепили:
👉 Перехватывают
launch$default, а не только launch. Это та версия, которую компилятор Kotlin генерирует для вызовов с default-параметрами. Именно она выполняется в большинстве реальных вызовов.👉 Parent-child связи строятся через обратный индекс
Job → traceId. Без него launch-в-цикле даёт квадратичный оверхед на горячем пути. Дерево собирается итеративно — страховка от StackOverflowError на глубоких иерархиях.Zero overhead по умолчанию: без
includedClasses в конфиге плагин ничего не инструментирует.Отсутствие нормального рантайм-инструментария для корутин давно раздражало. Это первый инструмент из тех, что видел, который работает на живом девайсе без ручной расстановки меток.
🔗 Статья на Хабре
#Kotlin #Coroutines #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍38👎9❤3
Команда Android в Банки.ру полторы недели дебажила Seamless-авторизацию (вход по номеру через
HTTP Header Enrichment): на iOS всё стабильно, на Android соединения рвались случайным образом. Логи врали, таймаут без причины, снифать мобильный трафик оператора нельзя, а сам оператор банил номер за десятки попыток авторизации подряд.Причина не в бэкенде и не в DNS. Когда открывается
Custom Tab для SSO, Activity приложения уходит в onPause() → onStop(). По документации Chrome, браузер должен поднимать process importance приложения через bound KeepAliveService, и процесс не попадает под сетевые ограничения. Но проприетарные слои энергосбережения Samsung и Xiaomi этот механизм игнорируют и убивают процесс по таймеру, не глядя на bound services. У Huawei логика другая — он смотрит на реальный сетевой трафик и не трогает активный процесс, поэтому там всё работало стабильно.Фикс —
ForegroundService с типом shortService:override fun onCreate() {
super.onCreate()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
startForeground(
NOTIFICATION_ID,
createNotification(),
ServiceInfo.FOREGROUND_SERVICE_TYPE_SHORT_SERVICE,
)
} else {
startForeground(NOTIFICATION_ID, createNotification())
}
}`shortService
доступен с Android 14 (лимит ~3 минуты, для 10–15 секунд поллинга с запасом), на более старых версиях работает как обычный ForegroundService. Процесс получает importance PERCEPTIBLE_APP_ADJ, и даже Samsung не трогает foreground service на One UI 6+.
‼️ ВАЖНО: сервис стартует и работает, даже если пользователь запретил приложению уведомления — POST_NOTIFICATIONS` для запуска foreground service не требуется, просто плашка не появится в шторке.Хороший повод лишний раз не доверять только официальной доке по process lifecycle и тестировать не на одном Pixel, а хотя бы на паре вендоров с разной агрессией энергосбережения.
🔗 Полная статья — там же разбор всех отвергнутых гипотез (DNS, оператор, регион) и код привязки к жизненному циклу SSO.
#Android #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115👎9❤3🔥3👏2
Google зарелизил Room 3.0 (
androidx.room3), и это самый серьёзный мажор Room за всю его историю: библиотеку переписали под Kotlin Multiplatform с нуля.Ради обратной совместимости 3.0 живёт в отдельном пакете и maven-координатах (
androidx.room3:room3-runtime вместо androidx.room:room-runtime), поэтому 2.x и 3.x спокойно уживаются в одном проекте на разных базах данных. Мигрировать можно постепенно, модуль за модулем.Cама миграция не косметическая.
Cursor и SupportSQLite слой под Android убраны, всё теперь через корутины:// было (Room 2.x)
roomDatabase.query("SELECT * FROM Song").use { cursor -> ... }
// стало (Room 3.x)
roomDatabase.useReaderConnection { connection ->
connection.usePrepared("SELECT * FROM Song") { stmt -> ... }
}
KAPT для Room больше не работает вообще, только KSP и весь код генерируется на Kotlin.
InvalidationTracker.Observer заменили на Flow (createFlow()). Конфигурация через Executor тоже ушла, теперь CoroutineContext.Из нового:
🔥 FTS5 через
@Fts5🔥 поддержка JS и WasmJS (драйвер поверх Web Worker и OPFS)
🔥 кастомные DAO return type converters. Paging, RxJava и LiveData интеграции теперь строятся на одном общем API вместо трёх разных костылей ранее.
‼️ ВАЖНО: это не «обновил зависимость и всё скомпилировалось». Если у тебя много прямых обращений к
SupportSQLiteDatabase или ты завязан на Executor-конфигурацию, то закладывай время на миграцию.#Android #AndroidDev #KMP #Web #WASM #AndroidJetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥73👎30👍10❤2
В июльском релизе апдейта Android Bench (лидерборда LLM для Android-задач) изменились не только модели, но и сам механизм оценки. Ранее бенчмарк использовал кастомный mini-swe-agent v1, теперь — фреймворк Harbor.
Весь лидерборд пересчитали заново: баллы всех моделей изменились, а старые результаты сохранены в архиве.
Добавили восемь моделей: Claude Fable 5, Claude Sonnet 5, Claude Opus 4.8, GLM 5.2, Kimi K2.7 Code, MiniMax M3, Qwen 3.7 Plus и Qwen 3.7 Max. Лидер — Claude Fable 5 с 84,5 баллами. GPT-5.5 отстаёт на четыре балла (80,2), а Sonnet 5 — почти на 10 баллов. Ожидаем добавления семейства GPT 5.6.
#Android #AndroidDev #AI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27👎11❤2
Раньше методика Android бенча была открытой, но доступной только для ознакомления. Теперь же бенчмарк можно адаптировать под свою кодовую базу и реально проверить модели на ваших задачах.
#Android #AndroidDev #AI
Please open Telegram to view this post
VIEW IN TELEGRAM
👎9👍6❤1
Android Broadcast
👍 Топ 5 моделей вполне оправдан и скоро там ворвутся модели GPT 5.6. Nek активно работает с ними и можете почитать в его блоге, а я ему доверяю. Проблема топов - очень высокая цена для достижения этих цифр, хотя другие показали затраты меньше, потому что просто не смогли справится и остановились на пол пути
😂 GLM 5.2 выдаёт результат на уровне Opus 4.8, но стоит на 33% дороже ($117 против $88). Почти треть переплаты за тот же результат. Мой личный опыт это подтверждает отдельно от бенчмарка: на подписке за $60 я за час съел недельный лимит, не сделав ничего полезного. Не знаю, кому такие открытые модели вообще нужны в таком виде.
🏆 Kimi K2.7 Code — результат между Opus 4.7 и 4.8 (70.4), а стоит примерно вдвое дешевле. Пока лучший баланс качество/цена среди моделей с внятным score.
🤔 DeepSeek V4 (Pro и Flash) заметно отстают от топа по качеству, но стоят копейки. Для дешёвого чернового прогона это рабочий вариант.
Жду появления в рейтинге моделей Composer 2.5 и Grok 4.5, так как они явно не дали мне глубины Opus, но справились довольно неплохо, и продолжаю их тесты. GLM 5.2 оказался мусором, съедающим бюджеты.
#Android #AndroidDev #AI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26👎14❤3
Алексей Быков выложил разбор: точечные перформанс-оптимизации ExoPlayer выросли в полноценную архитектуру:
👉 self-hosted UI-компоненты для видео
👉 пул плееров с прогревом
👉 четыре реальных продакшн-бага по пути (гонка позиций при паузе, повторное использование MediaSource между плеерами, Choreographer для плавного seekbar).
Полезно прочитать, если в приложении видео больше одного плеера на экране или вы сами проектируете архитектуру поверх ExoPlayer/Media3. Найдёте в статье готовые паттерны и грабли, мимо которых можно пройти.
🔗 Все детали в подробном разборе
#Android #AndroidDev #ExoPlayer
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍62🔥9❤4👎3
👉 Параллельные чаты агента. Открываешь несколько вкладок
Agent Mode и гоняешь задачи одновременно: рефакторинг UI в одной вкладке, правка ProGuard-правила в другой, генерация документации в третьей. У каждого чата можно выбрать свою модель.⚠️ Worktree пока не поддерживается, так что параллельные агенты работают в одном рабочем дереве, за конфликтами следить самому.
👉 LeakCanary встроен в Profiler. Популярный детектор утечек памяти теперь встроенная фича профайлера, не отдельная зависимость в проекте. На компьютере разработчика анализ идёт быстрее, заявлено до 5 раз в сравнении запуском на телефоне. Есть интерактивная трассировка утечки, переход к коду и кнопка
Fix with Agent. ✅👉 App Quality Insights теперь сам предлагает план фикса краша по данным из панели и может применить правку кода.
#Android #AndroidStudio #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👎22👍18❤3 1
#Android #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👎7
YouTube
The future unfolds! How to optimize Android apps for adaptive layouts
The future of devices is unfolding with new foldables and large screens, creating unique development opportunities. Optimize your Android app for new form factors, including foldables and large screens by implementing dynamic layouts with Jetpack Compose…
Samsung представила новые складные устройства и новый Fold требует вашего внимания, я точнее адаптации. Соотношение сторон 4:3 внутри и 16:10 снаружи. Формат очень интересный и вызовет интерес аудитооии, так что стоит потестировать. Может и завезут в Andorid Studio преднамеренные эмуляторы от партнёра
https://youtu.be/pLNJ-fNYTKU?si=4k98KxL7e_NYzKpU
Больше подробностей в анонсе
#Android #AndroidDev #Foldable
https://youtu.be/pLNJ-fNYTKU?si=4k98KxL7e_NYzKpU
Больше подробностей в анонсе
#Android #AndroidDev #Foldable
1👎12👍5 1
👉 Работу с Window Size Classes
👉 Уровни (Tier) адаптации приложения. Их всего 3, и выполнить уровни 1 и 2 несложно.
👉 Какие изменения конфигурации могут вызываться, но вы для смартфонов на них забивали.
👉 Поддержка смены ориентации (а планшеты и fold-ы вертят часто).
Помните, что с Android 17 все приложения на планшетах будут растягиваться, игнорируя все ограничения в манифесте вашего приложения!
#Android #Foldable #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19👎4