Альфа-библиотека Remote Compose позволяет создавать интерактивные игровые виджеты на Android
Public- 20 Oct, 2026

Разработчики Android теперь могут создавать высокоинтерактивные игровые виджеты с помощью новой альфа-библиотеки Remote Compose. Хотя Jetpack Glance остаётся стандартом для большинства реализаций виджетов благодаря обратной совместимости и инструментам, он опирается на устаревшую систему RemoteViews. Эта система имеет серьёзные ограничения: невозможность использовать математические выражения для непрерывных анимаций и строгий системный контроль над размером и частотой обновлений. Remote Compose закрывает эти пробелы, предоставляя гибкую основу для создания анимаций и сложных взаимодействий, которые ранее были невозможны или требовали неподдерживаемых хаков в экосистеме RemoteViews.
Архитектура Remote Compose разделяет определение интерфейса и его выполнение. Ваше приложение выполняет декларативный код, аннотированный @RemoteComposable, чтобы сериализовать макеты и выражения анимаций в компактный бинарный формат, известный как Remote Document. Этот документ отправляется в хост-процесс, например, в лаунчер домашнего экрана. Внутри хоста плеер Remote Compose локально обрабатывает все взаимодействия, изменение размера, смену состояний и анимации. Этот подход аналогичен работе веб-браузера, рендерящего HTML-документ. Поскольку плеер управляет обновлениями независимо в своём процессе, основному приложению не нужно оставаться активным. Этот механизм резко сокращает число циклов межпроцессного взаимодействия (IPC), что приводит к меньшим задержкам и снижению расхода батареи по сравнению с традиционными виджетами RemoteViews, где приложению приходится отправлять обновления интерфейса.
Для внедрения этой технологии разработчикам необходимо добавить в проект определённые зависимости, включая remote-core, remote-creation и remote-creation-compose из группы androidx.compose.remote, текущая версия - 1.0.0-alpha21. Класс виджета должен наследоваться от RemoteComposeWidget, который расширяет AppWidgetProvider. Разработчики определяют интерфейс с помощью Remote Composables, таких как RemoteBox, RemoteColumn, RemoteRow и RemoteText. Метод onUpdate компилирует макет в сериализованный Remote Document и отправляет его в лаунчер через updateRemoteView. Хотя Remote Compose использует полезную нагрузку RemoteViews в качестве транспортного механизма, разработчики не взаимодействуют с этим транспортным слоем напрямую. Система регистрирует виджет через стандартную конфигурацию приёмщика в AndroidManifest.xml с фильтром намерений APPWIDGET_UPDATE.
Управление состоянием в Remote Compose предлагает два различных подхода: локальное состояние хоста и сохранение на стороне приложения. Локальное состояние хоста находится внутри Remote Document на устройстве хоста, что делает его подходящим для временных данных сессии, таких как счёт в игре, который может сбрасываться при выпуске нового документа или перезапуске лаунчера. Сохранение на стороне приложения требуется для состояния, которое должно переживать обновления документов и перезапуски лаунчера, например, инвентарь пользователя или прогресс. Поскольку Android не уведомляет приложение о фоновом перезапуске лаунчера, а вместо этого воспроизводит последний кэшированный документ, критически важные данные должны храниться в хранилище приложения. Например, виджет виртуального питомца может делить валюту монет с приложением-магазином, тогда как игра в жанре сайд-скроллер хранит свой счёт полностью внутри Remote Document.
Главная сила Remote Compose заключается в графах выражений с динамическими ссылками. Эти графы - математические формулы, представленные в виде связанных узлов, где некоторые узлы содержат переменные, называемые динамическими ссылками. Плеер хоста напрямую обновляет эти ссылки, позволяя интерфейсу виджета обновляться на каждом кадре устройства без пробуждения процесса приложения. Разработчики создают эти графы косвенно через код. Например, счётчик нажатий можно реализовать с помощью MutableRemoteInt и функций valueChange. Когда пользователь нажимает на виджет, хост локально обновляет динамическую ссылку. Этот механизм обеспечивает эффективную работу даже сложных покадровых анимаций на устройстве хоста, сохраняя процесс приложения в приостановленном состоянии и экономя системные ресурсы.