Как пользоваться Repo в Termux на Android

Repo — это инструмент Google для управления множеством Git-репозиториев (AOSP). В Termux его можно установить и использовать для инициализации, синхронизации и управления исходниками прямо на смартфоне, но потребуется много места (100+ ГБ) и достаточная RAM.

Что такое Repo и зачем запускать его в Termux

Repo — обёртка над Git, которая объединяет десятки — тысячи репозиториев в единый проект через XML-манифест (.repo/manifest.xml). Он автоматизирует:

  • инициализацию проекта (repo init),
  • массовую синхронизацию (repo sync),
  • создание веток и применение патчей (repo start, repo upload через Gerrit).

Зачем на Android через Termux:

  • правки и тесты «в дороге» без ПК;
  • доступ к исходникам для изучения или локального патчинга;
  • работа с отдельными подсетями (ядро, device) без полной сборки.

Repo не заменяет Git — установите Git отдельно. Repo управляет множеством git-репозиториев, но для локальных коммитов и rebase всё равно используется git.

Установка Termux, зависимостей и Repo (пошагово)

  1. Установите Termux из F‑Droid. Откройте и обновите пакеты: pkg update && pkg upgrade
  2. Установите базовые утилиты: pkg install git python coreutils
  3. Для доступа к дополнительным пакетам: pkg install root-repo
  4. Установите сам Repo:
    • из пакета: pkg install repo
    • или вручную (если нужно свежее): curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo && chmod +x ~/bin/repo
  5. Проверьте: repo --version (ожидаемо 2.x.x).
  6. Доступ к хранилищу: выполните termux-setup-storage и смонтируйте ext4/SD при необходимости.

Без выделенной памяти (ext4/SD) и без root реальный объём пригодного места ограничен. На крупные AOSP-синхроны нужно ≥100 ГБ свободного места и желательно 16+ ГБ RAM.

Инициализация, sync и основные команды

Пример инициализации AOSP: mkdir -p ~/android && cd ~/android repo init -u https://android.googlesource.com/platform/manifest -b master repo sync -j8

Коротко по главным командам:

  • repo init -u URL -b branch — загрузить манифест.
  • repo sync [-c] [-jN] [--force-sync] — синхронизировать репозитории; -c — только текущая ветка, -jN — параллельных потоков.
  • repo start — создать локальную ветку во всех проектах.
  • repo forall 'git status' — выполнить команду в каждом проекте.
  • .repo/upload (repo upload) — отправить изменения в Gerrit (если используется).

Практика:

  • Для экономии места: repo sync -c и периодически repo prune.
  • Для медленных соединений: используйте --partial-clone/прошлый опыт (если поддерживается) или синхронизируйте отдельные подпроекты (repo sync kernel/*).

Сборка на устройстве и автоматизация

Для компиляции понадобятся Java (OpenJDK 17), ninja и прочие зависимости: pkg install openjdk-17 ninja Скрипт синхронизации: #!/data/data/com.termux/files/usr/bin/bash repo sync -j$(nproc) --force-sync

Реальность: полноценная сборка AOSP на смартфоне крайне долгая (часы—сутки) и часто невозможна из‑за ресурсов. На мобильном устройстве разумнее собирать отдельные компоненты (ядро, vendor blobs) или патчи.

Частые ошибки

  • "repo too old" — обновите бинарник repo вручную.
  • Ошибки 404 при sync — попробуйте --force-sync или проверьте правильность манифеста.
  • Недостаточно места — используйте ext4 на SD или удаляйте неиспользуемые ветки (repo prune).
  • Permission denied при записи в ~/bin — проверьте права и PATH.
  • Gerrit/Upload: для repo upload нужен аккаунт и настроенный ssh/HTTP авторизация.

FAQ

  • Нужно ли root? Нет, root не обязателен, но для использования SD/ext4 и больших разделов может потребоваться.
  • Сколько места реально нужно? Минимум 30–40 ГБ для небольших наборов; полный AOSP ~100–200+ ГБ.
  • Можно ли работать с только частью дерева? Да — синхронизируйте конкретные пути: repo sync device/ vendor/ kernel/ и т.п.
  • Альтернатива Repo? Git submodules и кастомные скрипты, но для AOSP Repo удобнее при большом числе репозиториев.

Надеюсь, это краткое руководство поможет быстро начать работу с Repo в Termux: установите зависимости, инициализируйте манифест, синхронизируйте нужные подсекции и тестируйте патчи локально, учитывая ограничения устройства.