Фича, за которую я бы сам не взялся

У меня есть MCP-сервер, который рендерит Android UI без эмулятора: coding agent получает PNG и дерево компонентов и может сам проверить, что получилось. Для XML там всё было понятно: inflate, measure, layout, PNG плюс View tree. А вот у Jetpack Compose точки входа вообще нет. Там есть только Kotlin-функция с аннотацией @Composable — и чтобы её вызвать, нужно разобрать сигнатуру, собрать типизированные параметры, подставить тему приложения, и только потом рисовать.

Это не «добавить ещё один формат UI», а отдельная исследовательская задача. И именно такие задачи я обычно просто не начинал — не потому что нерешаемо, а потому что стоимость выяснить «как к этому подступиться» легко могла перебить ценность самой фичи.

Первое предложение агента я отверг: пусть каждый Compose-проект сам пишет специальный renderer entry point. Это сработало бы, но убивало смысл инструмента — агент должен подключаться к любому существующему проекту без ручной подготовки. Вместо реализации я задал свойство результата: MCP сам адаптируется к Kotlin/Compose, проект при этом остаётся обычным проектом. Дальше исследованием и реализацией занялся агент.

Первый реальный рендер Compose-компонента дал нормальный PNG — и всё равно ничего не работало. Сериализация дерева сломалась: у одного из semantics nodes не было className, которого ждал существующий протокол renderer'а. Агент добавил fallback, пересобрал renderer, и тот начал отдавать полноценный semantics tree с bounds, text, clickable, selected для каждого узла.

От первой формулировки ограничения до исправленного публичного результата — около 1 часа 43 минут.

Я не знаю, сколько дней заняла бы такая реализация у меня. Честный ответ проще: я, скорее всего, вообще не начал бы её делать. Coding agent поменял не столько скорость написания кода, сколько экономику решения «стоит ли вообще пробовать эту идею».

Полную историю, включая второй сбой — на этот раз из-за Gradle policy, а не Compose — и параллельный demo на XML и Compose с одинаковыми сценариями, собрал в статье: https://hram.github.io/articles/android-ui-renderer-compose/

Фича, за которую я бы сам не взялся | Сетка — социальная сеть от hh.ru