Я научил ИИ агента рендерить Android экран целиком

Мой coding agent уже умел рендерить отдельный XML-layout через Robolectric и получать PNG плюс View Tree с координатами элементов. Потом я принёс ему настоящий экран рабочего приложения — и одного layout перестало хватать.

Реальный экран — это Activity с тулбаром, контейнер Fragment, RecyclerView с данными и состояния вроде loading overlay. Если запустить production Fragment, за ним потянутся DI, навигация и сеть. Мне же нужен был экран, достаточно настоящий для визуальной проверки, но без запуска приложения.

Границу провели так: XML Activity, Fragment, строк списка и drawable — настоящие; код Fragment, DI, навигация и сеть — не запускаются; данные задаются явно в запросе. Renderer надувает Activity, вставляет фрагмент в контейнер, а строки RecyclerView строит из настоящего item-layout по переданным значениям. Анимированный спиннер перед отрисовкой замораживается, чтобы две картинки подряд не отличались.

Отдельный урок — воспроизводимость. PNG и View Tree сохранялись, а параметры вызова нет. Теперь рядом с каждым рендером лежат request.json и replay.json: какой инструмент, с какими аргументами, какой модуль и вариант.

Рабочий экран показать нельзя, поэтому для иллюстраций я сделал открытое демо-приложение. Оно нашло то, чего не нашёл рабочий проект: renderer молча рассчитывал, что JUnit уже есть в тестовых зависимостях, и на чистом проекте падал с «package org.junit does not exist». Теперь JUnit добавляется только если его нет.

Код писал агент. Какую часть реальности сохранить настоящей, а какую заменить детерминированной моделью, решал я.

Как устроен composed render и что ещё нашло демо, разобрал в статье: https://hram.github.io/articles/android-ui-renderer-composed-screens/

Я научил ИИ агента рендерить Android экран целиком | Сетка — социальная сеть от hh.ru