Кратко
О чём эта статья
Если у Android-приложения открытый код, ИИ-агент может выполнить инженерную работу по простому запросу: клонировать проект, изменить его, собрать APK, установить на телефон, посмотреть экран и исправить дефекты. Статья показывает реальные короткие промпты, которыми был создан tg-digest-android.
- Форк добавляет вкладку Digest: непрочитанные посты из выбранных Telegram-каналов собираются в одну хронологическую ленту.
- За один день Claude собрал, установил, запустил, визуально проверил и дважды доработал приложение на физическом Redmi Note 8 Pro.
- Читателю нужно самому получить Telegram api_id и api_hash, записать их в корневой local.properties и включить на Android режим разработчика и USB debugging.
- На момент публикации личные Telegram credentials автора отсутствовали и в публичном дереве, и в обоих публичных коммитах; в импортированных исходниках оставалась только стандартная sample-пара Telegram.
- Готовая конфигурация рассчитана на arm64-v8a и основана на Telegram for Android 12.7.3 (6750).
Самое интересное здесь не то, что в форке Telegram появилась вкладка Digest. Важно, что для её запуска на настоящем телефоне мне не пришлось составлять план Android-сборки. Я обычными словами описал недостающее поведение, подключил телефон, позже написал лишь «запусти на моём телефоне последнюю версию» — и к вечеру пользовался своей сборкой.
Утром этой функции не было
Подписки на каналы быстро превращаются в две одинаково плохие крайности: либо сотни красных счётчиков, либо всё помечено прочитанным и важные посты теряются. Мне была нужна третья модель: самому выбрать несколько каналов и читать все их непрочитанные публикации как одну обычную ленту.
Получившаяся вкладка Digest умеет именно это:
- выбирать каналы через поиск и собирать их посты в общую хронологию;
- помнить собственную для каждого аккаунта границу прочитанного;
- открываться на первом непрочитанном и бесконечно листаться назад;
- показывать имя канала, медиаальбомы, даты и реакции штатными компонентами Telegram;
- помечать видимые сообщения прочитанными тем же способом, что обычный экран канала.
Это не маленькое демо и не новый клиент, нарисованный с нуля. Агенту пришлось обновить исходную базу до актуального опубликованного кода Telegram, разобраться с его локальной базой, пагинацией, группировкой медиа и навигацией. Но мне не пришлось диктовать названия классов. Я описывал то, что должен увидеть и почувствовать пользователь.
Работа была инженерной. Промпт — обычным человеческим языком
Главная часть задания выглядела примерно так. Здесь важна последняя фраза: она не дала агенту построить рядом с Telegram ещё один, заведомо чужеродный интерфейс.
Добавь отдельную страницу со всеми непрочитанными сообщениями из выбранных мной Telegram-каналов.
Нужен интерфейс выбора каналов. Для Digest храни отдельную границу последнего фактического чтения. При открытии ставь ленту на первое непрочитанное сообщение. Дай бесконечную прокрутку назад и нижнюю кнопку возврата к первому непрочитанному. Видимые посты помечай прочитанными через штатный read-state Telegram.
Показывай альбомы, название и логотип канала так же, как обычный Telegram. UI по максимуму переиспользуй, а не пиши свой — только если без своего не обойтись.
Собери приложение, установи его на подключённый телефон и проверь результат на устройстве.Через несколько часов приложение уже стояло на Redmi Note 8 Pro. Затем я дал ещё две короткие поправки: убрать подёргивание при прокрутке и поднять круглую кнопку над нижним меню, одновременно убрав лишний аватар между сообщениями. Claude смотрел результат на телефоне, нашёл причины, пересобрал APK и проверил снова. Это уже больше похоже на разговор с продуктовой командой, чем на «генерацию кода».
Код дешевеет, а точное намерение дорожает
Раньше между «мне нужна такая функция» и «я ей пользуюсь» стояла дорогая цепочка: найти разработчика, объяснить архитектуру, поднять окружение, неделями ждать сборку и самому разбираться с ADB. Поэтому мы привыкли считать интерфейс приложения чем-то окончательным: берём то, что дал производитель, и ждём следующую версию.
Кодинг-агент меняет экономику этой цепочки. Он умеет прочитать большой чужой репозиторий, подобрать
совместимые JDK, SDK и NDK, найти место для изменения, собрать APK, увидеть ошибку установки,
посмотреть logcat и повторить цикл. Не каждый результат будет хорошим, но цена первой
рабочей версии падает на порядок.
Это работает не со всем. Закрытое приложение без исходников, функция на сервере, платёжная инфраструктура или изменение криптографического протокола не появляются от одного промпта. Но если нужное поведение находится в открытом Android-клиенте и его можно проверить на экране, ждать официальную кнопку уже не всегда рационально.
Как повторить: человеку остаются только необходимые действия
Ниже — путь именно для этого форка. Нужны компьютер, coding agent с доступом к терминалу (Claude Code или Codex), Android-телефон, USB-кабель с передачей данных и несколько гигабайт свободного места. Репозиторий большой, а первая Android-сборка не мгновенная. Техническую подготовку поручим агенту; руками вы добавите приватные credentials, включите настройки телефона и войдёте в Telegram.
1 Дайте агенту подготовить проект
Откройте агента в пустой папке. Исходный проект начался с такого же короткого запроса: сделать форк официального Android-клиента и запустить его на подключённом телефоне. Для готового публичного форка используйте:
Клонируй https://github.com/howaihelps/tg-digest-android и запусти последнюю версию на моём Android-телефоне, подключённом по USB.
Скажи, когда мне нужно самому вписать Telegram app id и app hash или подтвердить что-то на телефоне. Не показывай и не коммить эти данные.2 Получите свои Telegram API ID и hash
Действие человека
- Войдите в Telegram через официальное приложение, если аккаунта ещё нет.
- Откройте my.telegram.org, войдите по номеру телефона и выберите API development tools.
- Заполните форму приложения, выберите Android и сохраните выданные
api_idиapi_hash.
Это не bot token. Telegram выдаёт одну пару на номер и требует собственный ID для стороннего клиента. Подробности есть в официальной инструкции Telegram.
В корне клонированного репозитория, рядом с settings.gradle, откройте local.properties и вручную замените placeholders. Значения пишутся без кавычек:
sdk.dir=/Users/[ВАШЕ_ИМЯ]/Library/Android/sdk
TELEGRAM_API_ID=[ВАШ_ЧИСЛОВОЙ_API_ID]
TELEGRAM_API_HASH=[ВАШ_32-СИМВОЛЬНЫЙ_API_HASH]На Windows или Linux путь sdk.dir будет другим — агент уже должен был его подставить.
В этом форке TMessagesProj/build.gradle читает две строки в BuildConfig, а BuildVars.java использует их при запуске. local.properties находится в .gitignore.
На момент публикации я дополнительно сравнил свои реальные значения со всеми файлами обоих публичных коммитов: личные api_id и api_hash не попали ни в текущий код, ни в историю Git. В импортированном upstream-коде есть стандартная ограниченная sample-пара Telegram — это не мои credentials, и для своей сборки на неё полагаться нельзя.
3 Подготовьте телефон
Действие человека
- Откройте «О телефоне» и семь раз нажмите «Номер сборки». На Xiaomi это может называться «Версия MIUI» или «Версия HyperOS».
- Вернитесь в настройки, откройте «Для разработчиков» и включите USB debugging.
- На Xiaomi дополнительно включите Install via USB; иногда нужен и USB debugging (Security settings).
- Подключите разблокированный телефон кабелем с передачей данных.
- Подтвердите на телефоне RSA-ключ компьютера; удобно отметить «Всегда разрешать».
Названия меню отличаются у производителей. Базовая последовательность подтверждена официальной инструкцией Android. Держите экран разблокированным во время первой установки: агент не может нажать системное подтверждение за вас.
4 Попросите агента собрать и запустить
После заполнения local.properties и подключения телефона не нужно перечислять ADB,
Gradle-задачу, ABI, CMake, путь к APK или Android activity. В реальной Claude-сессии весь запрос на
запуск выглядел так:
Запусти на моём телефоне последнюю версию.Claude сам проверил подключённое устройство, согласовал Android toolchain, собрал нужный вариант,
установил и запустил его, а затем посмотрел снимки экрана. Это были действия агента, а не
технические знания, спрятанные в моём промпте. Получился debug APK размером около 75 МБ, запущенный
как org.telegram.messenger.beta на arm64-v8a. Войти в Telegram, ввести код и
пароль двухфакторной аутентификации по-прежнему нужно самому. Не передавайте их агенту.
5 Закажите свою функцию на языке результата
После успешного запуска можно менять этот форк или повторить процесс с другим открытым приложением. Не начинайте с «создай класс» или «поправь RecyclerView». Опишите ситуацию, наблюдаемое поведение и критерии готовности.
Измени приложение под мой личный сценарий.
Сейчас: [чего не хватает или что я делаю вручную].
Хочу: [что я должен увидеть и что должно происходить].
Сохрани: [существующие экраны и поведение, которые нельзя менять].
По максимуму переиспользуй интерфейс приложения. Сделай, запусти последнюю версию на подключённом телефоне и сам проверь результат.6 Отлаживайте ощущение, а не только компиляцию
Первая сборка Digest работала, но прокрутка слегка дёргалась. Следующий промпт не содержал ни диагноза, ни плана тестирования — только то, что я увидел на телефоне:
Всё отлично, но при скролле экрана какое-то подёргивание. Сам можешь проверить и устранить?Агент нашёл полное обновление списка при пагинации и заменил его инкрементальным обновлением. В повторном замере доля janky frames снизилась с 11,9% до 2,1%, а 99-й процентиль времени кадра — с 40 до 22 мс. Другую визуальную ошибку я описал ещё проще: «подними кнопку над нижним меню и убери артефакт в центре, но сохрани имя канала». Это тоже был обычный язык, а не UI-спецификация. Финальный компромисс — заголовок только с именем: аватар автора, который создавал артефакт, не рисуется. Такой цикл — посмотреть, назвать дефект, дать агенту воспроизвести и проверить — важнее идеального первого промпта.
Перед публикацией нужен отдельный промпт на безопасность
Рабочий APK ещё не означает безопасный репозиторий. В реальном запросе на публикацию я сформулировал границу обычными словами, а Claude уже превратил её в проверку tracked-файлов и истории:
Запушь все изменения в публичный репозиторий одним хорошим коммитом на английском.
Ни в коем случае не пушь мой app id и app hash. Они должны остаться в локальном файле, который не попадает в репозиторий. Перед push всё внимательно проверь.Telegram for Android распространяется по GNU GPL v2 or later, поэтому форк сохраняет лицензию и исходники. Кроме юридической стороны остаётся практическая: собственный форк нужно обновлять, просматривать его diff и не считать сгенерированный код автоматически надёжным. Агент резко снижает стоимость реализации, но не отменяет ответственность владельца сборки.
Не приложение для всех — приложение ровно для вас
Массовый продукт обязан выбирать функции, которые окупятся для миллионов пользователей. Личная сборка может быть странной, узкой и идеальной для одного человека. Именно здесь агенты меняют софт сильнее всего: не обязательно основывать стартап или годами ждать голосования за feature request. Иногда достаточно открытого репозитория, точного описания, USB-кабеля и готовности посмотреть на результат собственными глазами.
Код не стал бесполезным. Он стал гораздо менее дефицитным. А право взять его, изменить и запустить на своём устройстве — наоборот, стало ощутимо ценнее.
Короткий маршрут
- Возьмите открытый Android-исходник и дайте агенту поднять toolchain.
- Сами получите и локально запишите приватные credentials.
- Включите Developer options, USB debugging и подключите разблокированный телефон.
- Поручите агенту собрать, установить, открыть и проверить APK.
- Описывайте нужное поведение обычным языком.
- Итерируйте на реальном устройстве и отдельно проверяйте секреты и лицензию перед push.
Краткий FAQ
Можно ли действительно изменить Android-приложение с ИИ, не будучи разработчиком?
Да, если исходники открыты, а результат можно проверить на устройстве. Вам всё равно нужно ясно описать поведение, подтверждать чувствительные действия, локально добавить приватные credentials и протестировать результат; репозиторий, инструменты, сборку, установку и большую часть отладки может взять на себя агент.
Куда записывать Telegram api_id и api_hash?
Создайте local.properties в корне репозитория и добавьте TELEGRAM_API_ID и TELEGRAM_API_HASH без кавычек. Git игнорирует файл, а Gradle передаёт значения в BuildConfig во время локальной сборки.
Что нужно сделать на Android-телефоне?
Семь раз нажать «Номер сборки», включить «Для разработчиков» и USB debugging, подключить разблокированный телефон кабелем с передачей данных и подтвердить RSA-ключ компьютера. На Xiaomi может понадобиться ещё Install via USB.