Кратко
О чём эта статья
Если Android-приложение имеет открытый исходный код, ИИ-агент может клонировать его, добавить личную функцию, собрать APK, установить его на подключённый по USB телефон, посмотреть результат и исправить дефекты. Статья показывает это на публичном форке tg-digest-android и даёт готовые промпты, а Telegram api_id и api_hash хранит только в локальном gitignored-файле local.properties.
- Форк добавляет вкладку 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 и увидеть одну ленту непрочитанных постов только из выбранных каналов. Такой кнопки не было. Я не стал писать запрос в поддержку и ждать, попадёт ли идея в чужой roadmap: открыл исходники официального Android-клиента, описал поведение Claude, подключил телефон по USB — и к вечеру пользовался своей сборкой.
Утром этой функции не было
Подписки на каналы быстро превращаются в две одинаково плохие крайности: либо сотни красных счётчиков, либо всё помечено прочитанным и важные посты теряются. Мне была нужна третья модель: самому выбрать несколько каналов и читать все их непрочитанные публикации как одну обычную ленту.
Получившаяся вкладка 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 Дайте агенту подготовить проект
Откройте агента в пустой папке и отправьте этот промпт. Он специально останавливается перед секретами и не удаляет установленное приложение при конфликте подписи.
Подготовь к локальной сборке репозиторий https://github.com/howaihelps/tg-digest-android.
Работай автономно: клонируй проект, прочитай README и проверь Git-историю и рабочее дерево. Определи мою ОС и наличие Git, JDK 17, Android SDK/Build Tools 35, NDK 27.2.12479018, CMake и platform-tools. Подготовь недостающее; если для скачивания или установки нужно моё разрешение, запроси его один раз с точным объяснением.
Никогда не печатай, не пересылай и не коммить TELEGRAM_API_ID и TELEGRAM_API_HASH. Проверь, что корневой local.properties игнорируется Git. Если файла нет, создай безопасный шаблон только с корректным sdk.dir и placeholders для двух значений, затем остановись и попроси меня заполнить их вручную.
Пока не собирай и не пушь. В конце сообщи только путь к репозиторию, готовность toolchain, путь к local.properties и следующее действие для меня.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 и подключения телефона отправьте второй промпт. Это и
есть инструкция запуска; команды из README приведены как ожидаемые, но разбираться в них самому не
нужно.
Credentials в local.properties заполнены, Android-телефон подключён по USB и разблокирован. Собери и запусти приложение на нём.
Работай до проверяемого результата. Не выводи значения TELEGRAM_API_ID и TELEGRAM_API_HASH и перед любым Git-действием убедись, что local.properties не tracked.
1. Проверь adb devices -l. Если статус unauthorized, попроси меня подтвердить RSA-запрос и продолжи после подтверждения.
2. Проверь ABI через adb shell getprop ro.product.cpu.abilist. Этот форк сейчас собирается только для arm64-v8a. Если телефон не поддерживает arm64-v8a, адаптируй ABI-конфигурацию минимальным изменением и объясни его.
3. Подготовь PATH, JAVA_HOME, ANDROID_HOME и ANDROID_SDK_ROOT; согласуй фактически установленную версию CMake с Gradle.
4. Собери ./gradlew :TMessagesProj_App:assembleAfatDebug. Исправляй ошибки окружения или сборки, а не останавливайся на первой.
5. Ожидаемый APK: TMessagesProj_App/build/outputs/apk/afat/debug/app.apk. Установи его через adb install -r.
6. Если установка запрещена, попроси меня включить Install via USB. Если есть конфликт подписи, НЕ удаляй старое приложение без моего явного разрешения: удаление сотрёт его локальные данные.
7. Запусти package org.telegram.messenger.beta, проверь, что открылся первый экран и доступна вкладка Digest. Для диагностики используй adb, logcat и снимки экрана.
В конце сообщи: путь и размер APK, ABI устройства, результат установки, запущенный package/activity и что мне проверить глазами. Ничего не пушь.Текущая конфигурация проверена на arm64-v8a: debug APK размером около 75 МБ был
собран, установлен и запущен как org.telegram.messenger.beta. На первом запуске вам
останется вручную войти в Telegram, ввести код и пароль двухфакторной аутентификации, если он
включён. Не передавайте эти данные агенту.
5 Закажите свою функцию на языке результата
После успешного запуска можно менять этот форк или повторить процесс с другим открытым приложением. Не начинайте с «создай класс» или «поправь RecyclerView». Опишите ситуацию, наблюдаемое поведение и критерии готовности.
Измени запущенное на телефоне приложение под мой сценарий.
Проблема: [что сейчас приходится делать вручную или чего не хватает].
Желаемое поведение: [что я должен увидеть и что должно происходить после каждого действия].
Данные и состояние: [что хранить, когда обновлять, что должно переживать перезапуск].
Границы: [что нельзя менять; какие штатные экраны и поведение надо сохранить].
Готово, когда:
- [проверяемый критерий 1];
- [проверяемый критерий 2];
- [проверяемый критерий 3].
Сначала найди существующие компоненты и пути данных в исходнике. По максимуму переиспользуй штатный UI и архитектуру. Затем реализуй минимальный целостный вариант, собери, установи на подключённый телефон и сам проверь критерии. Покажи мне результат на скриншоте и перечисли компромиссы. Не пушь без отдельной команды.6 Отлаживайте ощущение, а не только компиляцию
Первая сборка Digest работала, но прокрутка слегка дёргалась. Следующий промпт не содержал диагноза — только наблюдение и требование измерить результат:
На физическом телефоне лента подёргивается при подгрузке во время прокрутки. Воспроизведи проблему сам, собери измерения janky frames / frame time, найди причину, исправь без изменения поведения ленты, переустанови APK и повтори тот же замер. Не считай задачу законченной только потому, что код компилируется.Агент нашёл полное обновление списка при пагинации и заменил его инкрементальным обновлением. В повторном замере доля janky frames снизилась с 11,9% до 2,1%, а 99-й процентиль времени кадра — с 40 до 22 мс. Другую визуальную ошибку я описал ещё проще: «подними кнопку над нижним меню и убери артефакт в центре, но сохрани имя канала». Финальный компромисс — заголовок только с именем: аватар автора, который создавал артефакт, не рисуется. Такой цикл — посмотреть, назвать дефект, дать агенту воспроизвести и проверить — важнее идеального первого промпта.
Перед публикацией нужен отдельный промпт на безопасность
Рабочий APK ещё не означает безопасный репозиторий. Перед push попросите агента проверить tracked files и всю историю на секреты, показать diff относительно upstream, оставить лицензию и не публиковать debug APK как официальный клиент.
Подготовь изменения к публикации, но сначала проведи security и license audit.
Проверь git status, git diff, все tracked-файлы и всю публикуемую историю на мои реальные TELEGRAM_API_ID и TELEGRAM_API_HASH, токены, пароли, signing keys и абсолютные приватные пути. Не печатай значения найденных секретов — сообщай только тип, файл и безопасное исправление. Убедись, что local.properties ignored и никогда не был tracked.
Сравни изменения с upstream, сохрани исходные copyright headers и требования лицензии. В README укажи, что это неофициальная личная сборка, какие версии/ABI проверены, куда локально вводить credentials и как собрать APK.
Покажи мне итоговый список файлов и audit-результат. Коммить и пушь только после моего явного подтверждения.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.