📱 Архитектура · разрез приложения кликабельный · подробности прячутся под переключателем

Что внутри апки — и внутри станка, который её делает

Конвейер, который по одному абзацу текста собирает готовое Android-приложение: дизайн-документ, исходники, картинки, сборка, автотест на эмуляторе, скриншоты.

На главной шаги «ТЗ для AI → Генерация → Билд» закрашены зелёным и подписаны «закрыто опытом команды». Зелёный прямоугольник — это не объяснение. Здесь он вскрыт: что за слои у самого приложения, кто пишет каждую строчку, где стоят ворота, и что происходит, когда сборка падает.

Откуда взято. Страница собрана чтением исходников фабрики, а не пересказом её README: ветка chief/6571bc3527, каталог AndroidAppFactory/. Ничего из описанного мы сами не запускали: страница только читает — исходники, логи и то, что прогон оставил на диске.

Включи — и в каждом блоке появятся пути к файлам, команды и версии. Выключи — останется человеческий язык.
Одна картинка

Станок целиком: что входит, что внутри, что выходит

Фабрика — не сервис и не приложение. Это папка на диске: набор bash-скриптов, которые по очереди дёргают Claude, генератор картинок и Gradle, а между вызовами записывают своё состояние в файл. Отсюда её главное свойство: любой шаг можно перезапустить, ничего не потеряв.

пишет LLM делает скрипт проверяет устройство решает человек упавшая сборка возвращается к Claude
ЧТО КЛАДУТ НА ВХОД Абзац текста «калькулятор стоимости поездки, минимализм» Тикет в Jira то же самое, но приезжает по вебхуку, без человека Ниша из отчёта страница /live: запрос, под который пусто в Play ФАБРИКА — ЭТО ПАПКА НА ДИСКЕ 80 скриптов · 14 518 строк bash · состояние прогона в файле 1 · МОЗГ — Claude в консоли Скрипт не пишет код сам: он зовёт claude в консоли и ждёт файлы на диске. дизайн-документ исходники экранов починка упавшей сборки 2 · МАТЕРИАЛЫ — чтобы апки не были близнецами Цвет, форма и скелет экранов берутся из каталога, а не выдумываются заново. палитры и стили шаблон приложения картинки нейросетью 3 · КОНВЕЙЕР — очередь шагов с памятью После каждого шага пишется, где остановились — прогон продолжается оттуда. файл состояния повтор с любого шага журнал каждого запуска 4 · СБОРКА И ПРОВЕРКА — на настоящем Android Gradle делает пакет, эмулятор его ставит и запускает, скриншоты это доказывают. Gradle → пакет приложения эмулятор → запуск и скриншоты ЧТО ВЫХОДИТ Файл .apk можно поставить на телефон руками Файл .aab подписанный, это то, что просит Google Play Скриншоты в тикет и в Telegram, как доказательство

↔ схему можно прокрутить вбок

Красная петля — самая важная линия на схеме. Сборка Android падает часто и по-глупому: не та версия, не тот путь, забытая зависимость. Вместо того чтобы звать человека, конвейер отдаёт текст ошибки обратно тому же Claude и просит починить — и так несколько раз подряд.

Те же четыре контура — словами
Разрез

Само приложение: семь слоёв, из которых оно склеено

Если совсем коротко: это React Native-приложение из четырёх экранов — без библиотеки навигации, без базы данных и без единой собственной строки на Kotlin. Весь код сминается в один файл внутри пакета, а вокруг него стоковая нативная оболочка Android, одинаковая у всех апок фабрики.

Ткни в слой на схеме или в карточку рядом — подсветится соответствие. Синее приезжает из шаблона одинаковым в каждой апке, жёлтое пишется под конкретную апку с нуля. Соотношение этих двух цветов и есть ответ на вопрос «а что тут вообще делает нейросеть».

шаблон — одинаково в каждой апке генерируется — своё у каждой апки смешано
ОДИН ФАЙЛ .APK — ЭТО ТО, ВО ЧТО СЕМЬ СЛОЁВ ПРЕВРАЩАЮТСЯ ПОСЛЕ СБОРКИ Экраны — то, что видит человек заставка → меню → ввод данных → результат ГЕНЕРИРУЕТСЯ Кирпичики экранов кнопка, строка ввода, карточка с числом, чипы единиц ГЕНЕРИРУЕТСЯ Математика — вся польза апки чистые функции без экранов: их и проверяют тестами ГЕНЕРИРУЕТСЯ Переключатель экранов одна переменная в памяти — никакой библиотеки навигации ГЕНЕРИРУЕТСЯ Движок JavaScript внутри телефона весь код апки сжат в один файл и исполняется здесь ШАБЛОН Нативная оболочка Android окно приложения, имя пакета, название под иконкой, права СМЕШАНО Картинки и подпись PNG от нейросети + криптоподпись, без которой не установить СМЕШАНО

↔ схему можно прокрутить вбок

Самое неожиданное место в этой архитектуре — четвёртый слой. В типовом мобильном приложении переход между экранами делает отдельная библиотека навигации со своим стеком, историей и параметрами. Здесь её нет вообще: экран — это одна переменная, а каждый экран получает данные обычными аргументами. Для четырёх экранов без «назад по стеку» библиотека была бы дороже задачи — и, что важнее для конвейера, она добавила бы ещё одну зависимость, которая умеет ломать сборку.
Сквозной путь

От абзаца текста до подписанного пакета

Каждый шаг оставляет после себя файл на диске — зелёная плашка. Это и есть определение «шаг прошёл»: не «модель ответила», а «на диске появилось то, что можно открыть». Цвет номера говорит, кто исполнитель.

Развилка

Тот же конвейер умеет во вторую платформу

Кроме React Native в фабрике есть ветка Flutter. Сделана она не копипастой конвейера, а зеркалом: те же имена шагов, тот же файл состояния, те же коды завершения — чтобы всё, что идёт после сборки, читалось одним и тем же кодом и не знало, какая платформа была внутри.

Тикет или бриф одинаковый для обеих Развилка одно поле в тикете — и это не граф, а bash React Native — боевая ветка две апки собраны, до сборки работает на Linux 986 строк конвейера · 11 проверок до сборки Flutter — достроена наполовину шесть своих скриптов, остальное общее 500 строк конвейера · 12 своих проверок Хвост — общий на двоих скриншоты, ревью, облачная сборка, возврат пакета в тикет — один код

↔ схему можно прокрутить вбок

Где именно развилка
Не в графе оркестратора, а в одном шелл-скрипте: он читает поле платформы из тикета и подменяет собой следующий скрипт. Любое непонятое значение молча превращается в React Native — опечатка в поле не выдаст ошибку, а тихо соберёт не то.
approve-pipeline-router.sh (68 строк) → jira-get-platform.sh (customfield_10062) → exec на одну из двух веток
Что переиспользуется
Своего у Flutter — шесть скриптов, два конфига облачной сборки, свой свод правил и шаблон проекта. Остальное общее: часть общих скриптов узнаёт платформу по файлу проекта Flutter в каталоге, а часть про платформу вообще не знает — им всё равно, что собирать.
детект по pubspec.yaml: test-ui.sh, verify-app-runs.sh, local-screenshot-gate.sh, heal-build.sh, cm-prepare.sh. Платформо-независимы: gen-assets.sh, geometry-check.sh
Честно про состояние
Ветка Flutter в этом окружении не запускается: сам Flutter не установлен. Но списывать всё на Flutter нечестно — под Windows остались и три общих скрипта, которые работают с устройством: пути вида C:/… и вызовы powershell живы и там.
то есть «две платформы» пока означает «одна работающая до сборки и одна написанная»
Ворота

Что стоит между «собралось» и «работает»

Собранный пакет ничего не доказывает: приложение может установиться и показать белый экран. Поэтому между сборкой и выдачей результата стоит несколько независимых проверок, и каждая умеет сказать «нет».

Читать этот список надо с двумя поправками. Первая: почти каждые ворота можно проехать — конвейер сделан «мягко падающим», половина вызовов обёрнута так, что код возврата ни на что не влияет, а единственный настоящий стоп — отсутствие файла пакета. Вторая: последние четыре ворот требуют живого Android-устройства, а на машине, где собирались обе апки, его нет. Так что «девять ворот» — это про устройство конвейера, а не про то, сколько из них отработало.
Из чего собрано

Стек с версиями — без «современных технологий»

Версии здесь не украшение: половина правил конвейера существует потому, что конкретные версии конкретно ссорятся между собой. Всё, что ниже, вычитано из файлов проекта, а не из документации.

Не демо

Две апки, собранные по-настоящему

Обе выросли из тем, которые нашёл преданализ, и обе доехали до установочного файла. Ниже — их размеры и содержимое, снятые с диска, а не обещания.

Где ломается

Что честно не работает

Схема выше нарисована ровно; настоящий конвейер — нет. Здесь собрано то, что упирается в физику, деньги или чужие правила, а не в «доделать на следующей неделе».

Расшифровка

Слова, которые выше встречались

По одной строке на термин — чтобы страницу можно было показать человеку, который Android не собирал ни разу.

Рядом

Что читать дальше

Эта страница отвечает на «как сделать приложение». Соседние отвечают на «какое именно приложение стоит делать» — без них конвейер просто быстро печатает никому не нужные апки.