🤖 AGP 9.6: покрытие инструментальных тестов без JaCoCo при сборке
Чтобы посчитать покрытие кода инструментальными тестами, Android Gradle Plugin (AGP) по умолчанию встраивает счётчики JaCoCo в классы приложения прямо во время сборки. В AGP 9.6.0-alpha01 появился экспериментальный режим с агентом на устройстве: приложение собирается без этого кода, а классы инструментирует агент на тестовом устройстве во время прогона.
По данным Google, сборка ускоряется на 10–20%, debug APK становится меньше на 20–25%, а неиспользуемые сгенерированные классы перестают занижать процент покрытия. Режим включается двумя флагами в gradle.properties поверх привычного enableAndroidTestCoverage = true:
Отчёт строит та же задача create<Variant>AndroidTestCoverageReport. Нужны устройство с Android 9 или новее и debuggable-сборка.
⚠️ Цифры не совпадут со старыми отчётами: агент считает инструкции DEX, а не Java-байткода, а классы, которые не загрузились во время тестов, в отчёт не попадают. Пороги покрытия при переходе стоит пересмотреть.
🏝 Room 3 зависает на suspend-@Transaction: лечится сменой SQLite-драйвера
Разработчик разобрал зависание приложения на Room 3: сплэш висит бесконечно, а краша, ANR и строчки в логах нет. Дамп потоков через kill -3 показал корутину, навсегда вставшую на локе внутри PassthroughConnectionPool в suspend-функции DAO с @Transaction и телом.
Почему так: Room спрашивает у драйвера hasConnectionPool. AndroidSQLiteDriver отвечает true, и Room не заводит свой пул: остаётся одно соединение, привязанное к потоку, без таймаута ожидания. Если код транзакции сменит диспетчер, транзакция ждёт сама себя. Исправление этого дедлока заявлено в Room 3.0.2, но у автора зависало именно на 3.0.2, а в 3.0.3 чинили регрессию от этого исправления.
Как исправить: передать в билдер BundledSQLiteDriver. Он возвращает false, и Room поднимает собственный пул: в WAL четыре читателя и один писатель, а при долгом ожидании через 30 секунд прилетает SQLiteException вместо тихого зависания. Room тоже стоит обновить до актуальной версии.
Room.databaseBuilder<AppDatabase>(context, DB_NAME)
.setDriver(BundledSQLiteDriver()) // was AndroidSQLiteDriver()
.setJournalMode(JournalMode.WRITE_AHEAD_LOGGING)
.build()
⚠️ Что учесть при смене драйвера:
• в APK появится своя SQLite: около 620–650 КБ на ABI в сжатом виде, в universal APK все четыре ABI, примерно 2,5 МБ;
• соединений станет несколько, Room сам ставит на каждое PRAGMA synchronous (в WAL это NORMAL), а RoomDatabase.Callback.onOpen вызывается один раз на базу, поэтому PRAGMA оттуда применится только к одному соединению. Автор задаёт её в обёртке над драйвером;
• в такой обёртке делегируйте inTransaction(), иначе дефолтная реализация бросит NotImplementedError.
🤖 В Android-скиллах для агентов появились ML Kit Agent API, Jetpack Ink и память виджетов
Google выпустила v1.0.18 библиотеки Android skills — готовых инструкций, по которым AI-агент работает с конкретными API. Новых скиллов четыре:
👉 mlkit-agent-api — агентные сценарии прямо на устройстве через ML Kit GenAI Agent API на Gemini Nano и AICore
👉 ink-app-builder и ink-custom-brush-builder — рисование от руки на Jetpack Ink в Compose и свои кисти BrushFamily (androidx.ink 1.1.0-alpha03+)
👉 glance-appwidget-updates-and-memory — обновление виджетов на Glance и лимиты памяти на картинки в RemoteViews в Android 17, из-за которых тяжёлые картинки теперь роняют приложение
Ещё обновили 15 скиллов, среди них appfunctions, navigation-3, r8-analyzer и jetpack-compose-performance, а jetpack-compose/theming/styles удалили.
⚙️ Styles API в Compose переделывают: документацию временно убрали
На Google I/O команда Compose показала Styles, новый способ настраивать внешний вид компонентов. Теперь она сообщила, что по итогам отзывов API станет менее навязчивым: определения визуальных свойств переедут из слоя foundation в слой дизайн-системы, то есть в Material или вашу собственную. Дизайн-система сама решит, какие свойства её компонентов можно стилизовать, а свои свойства можно будет объявлять через stylePropertyOf и styleLocalOf.
Пока идёт переделка, с developer.android.com сняли весь раздел про Styles (основы, темизацию, анимации состояний, сравнение с Modifier, рекомендации и ограничения), а также опубликованный ранее скилл для AI-агентов. В Compose 1.13 Styles API остаётся @Experimental.
⚠️ Если вы уже пробовали Styles в коде, API ещё поменяется. Новую форму обещают показать отдельно и собрать по ней отзывы.
🔗 Styles update
🤖 Gemma на 584 МБ без раздувания APK: модель раздаёт Google Play
Kevin Desai добавил в своё KMP-приложение PokeCollect ответы на вопросы о коллекции с помощью Gemma 3 1B на LiteRT-LM. Модель весит 584 МБ, и класть её в APK значит отпугнуть пользователя. Поэтому он вынес её в AI pack библиотеки Play for On-Device AI: хранит и раздаёт модель Google Play.
Модель живёт в отдельном модуле без кода и приезжает одним из трёх способов: вместе с установкой (install-time), сразу после неё (fast-follow) или по запросу (on-demand). Под капотом Play Asset Delivery.
В рантайме AiPackManager отдаёт путь к файлу или запускает fetch(), а слушатель сообщает статус. Для загрузок больше 200 МБ по мобильной сети есть статус WAITING_FOR_WIFI.
⚠️ Библиотека в бете и работает только с AAB: нужны AGP 8.8+ и bundletool 1.18+. Лимит — 1,5 ГБ на пак. Для загрузки добавляется foreground service, его придётся задекларировать в Play Console с коротким видео.
Google продолжает пополнять Android Bench — свой лидерборд LLM на реальных задачах Android-разработки. Теперь туда добавили Claude Sonnet 5.5, Gemini 4 Argon и GPT 6.1 Sol, и у рейтинга сменился лидер.
Long-horizon задачи (30 штук: миграции, конвертация приложений, новые фичи):
🥇 Claude Sonnet 5.5 (max) — 40,0%, $1574,9 за прогон
🥈 Claude Opus 5.5 (max) — 37,3%, $1150,3
🥉 GPT 6.1 Sol (max) — 29,3%, $99,5
• GPT 6 Astra (high) — 28,0%
• Gemini 4 Argon (high) — 21,3%
Sol почти в 16 раз дешевле Sonnet за прогон и примерно в 2,7 раза быстрее (26,6 ч против 70,7 ч).
Моделей Grok от SpaceXSI (бывшая xAI), включая флагманскую Grok 4.7, в Android Bench по-прежнему нет.
🛒 Публикация приложения из России в 2026: опыт с пятью магазинами
Российская команда ИИ-репетитора английского Aisha выложила приложение в RuStore, Google Play, Huawei AppGallery и App Store, а в Samsung Galaxy Store так и не попала. Главные проблемы оказались не в модерации, а в документах и приёме оплаты.
👉 RuStore — регистрация ИП через VK и КЭП, одобрили за день, обновления проходят примерно за час. Подписки — через RuStore Pay.
👉 Google Play — D-U-N-S делали около месяца. Play Billing в России приостановлен, но для российских пользователей действует исключение: подписки принимают через RuStore Pay, Google за эти платежи не берёт комиссию. Модераторам схему пришлось объяснять в примечаниях к проверке. Обновления — 2–3 дня.
👉 Huawei AppGallery — для ИП хватило сканов документов, без D-U-N-S, сторонние платежи разрешены. Проверка — от двух дней, чаще около пяти.
👉 App Store — новым российским аккаунтам Paid Applications Agreement сейчас недоступно, поэтому оформить внешнюю ссылку на оплату не удалось. Вышла только бесплатная версия без внешних ссылок и с кнопкой мгновенного удаления аккаунта.
👉 Samsung Galaxy Store — даже для бесплатного приложения нужен статус коммерческого продавца с D-U-N-S и PayPal на домене компании. Заявку отклонили.
⚠️ Сроки проверок — личный опыт одной команды, а не обязательства магазинов.
🔗 Личный опыт публикации в магазинах приложений в России в 2026 году (Хабр)