Пошаговая сборка AOSP: от загрузки исходников до готового образа

Короткий ответ: скачайте официальные манифесты AOSP и используйте утилиту repo (repo init -b <ветка>; repo sync), подготовьте Linux‑окружение (правильный JDK, зависимости, достаточно диска и RAM), выполните source build/envsetup.sh → lunch → make (или m/m otapackage). Для реального устройства дополнительно нужны device/vendor tree и бинарные blobs (или kernel). Ниже — подробный практический план.

Где взять исходники и манифесты

  • Официальный источник AOSP — манифесты и репозитории Google (используйте официальные манифесты для нужной версии Android).
  • Сообщества (LineageOS, другие форки) полезны как примеры device/vendor и патчей, но для базовой сборки опирайтесь на официальные ветки.
  • Локальные/региональные зеркала и зеркала на git‑хостингах ускоряют загрузку при медленной сети, но проверьте соответствие веток.

Подготовка окружения

  • ОС: 64‑битный Linux (Ubuntu LTS/ Debian — версии указаны в документации под релиз).
  • Диск: 250–400+ ГБ свободного места для исходников, out и кеша.
  • Память/CPU: 16–32+ ГБ RAM и многопоточный CPU.
  • Установить пакеты: git, python3, openjdk (версия согласно релизу), make, clang/gcc, ccache, инструменты для 32‑битных библиотек при необходимости.
  • Настройте JAVA_HOME и PATH; убедитесь, что git настроен (user.name, user.email).
  • Рекомендации: включите ccache, выделите отдельный диск/раздел под исходники.

Проверьте в документации релиза точную версию JDK и список пакетов — несоответствие JDK одна из частых причин сбоев.

Установка repo, инициализация и синхронизация

  1. Установите скрипт repo в ~/bin и сделайте исполняемым.
  2. Создайте пустую папку, например ~/android/aosp.
  3. Инициализация: repo init -u <URL_манифеста> -b <ветка_релиза>
    • Выберите ветку: стабильная релизная метка (например android-14.0.0_rX) предпочтительнее master для первой сборки.
  4. Синхронизация: repo sync -j
    • Первый sync может занять часы и сотни гигабайт. Используйте параллелизм (-j), но не перегружайте соединение.
    • При обрывах запуск repo sync повторит загрузку недостающих репозиториев.

Структура исходников и выбор конфигурации сборки

  • Основные каталоги: build/, frameworks/, system/, packages/, hardware/, device/, kernel/, vendor/.
  • Подготовка сборки:
    • source build/envsetup.sh
    • lunch (формат: aosp_-userdebug, generic_x86_* для эмулятора)
    • Варианты: eng (макс. debug), userdebug (удобно для разработки), user (релиз).
  • Команды сборки:
    • m или make (используйте m otapackage для создания OTA-архива)
    • Для ускорения: make -j, но следите за RAM/температурой.

Device, vendor и kernel — как подготовить для реального устройства

  • Device tree: device// содержит конфигурацию продукта (BoardConfig.mk, device.mk, AndroidProducts.mk).
  • Vendor blobs: извлекаются с устройства (adb pull + скрипты extract-files.sh) или берутся из официальных пакетов производителя. Без них аппаратные компоненты (модем, камера, GPU) могут не работать.
  • Kernel: исходники ядра обычно публикуются производителем; ядро собирается отдельно и подключается в boot.img или используется prebuilt.
  • Советы: ищите готовые device/vendor в сообществах для вашей модели — это ускорит портирование.

Не пытайтесь сразу собирать девелоперскую ветку для незнакомого устройства — начните со стабильного релиза и эмулятора.

Как тестировать и прошивать

  • Эмулятор: используйте generic образы, полученные после сборки, через встроенный emulator — безопасно для проверки UI и фреймворка.
  • Реальное устройство:
    • Разблокируйте загрузчик.
    • Fastboot: flash boot/ system/ vendor/ и другие образы (список зависит от устройства).
    • Альтернатива: otapackage → adb sideload в recovery.
  • Всегда проверяйте совместимость версий загрузчика/разметки разделов и наличие соответствующего vendor/kernel.

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

  • Неверная версия JDK → ошибка компиляции Java/Jack/Soong.
  • Недостающие зависимости (32‑битные библиотеки, ncurses, zlib).
  • Мало места на диске — сборка оборвётся без понятного лога.
  • repo sync обрывается из‑за сети — перезапустите, используйте зеркало.
  • Несовместимость device/vendor — устройство не загрузится (bootloop).

FAQ

  • С: Сколько времени займёт сборка?
    О: На мощной машине (многоядерная, 32+ ГБ RAM) чистая сборка может занять от 1–6 часов; на слабом железе — значительно дольше.
  • С: Могу ли я собрать AOSP без vendor blobs?
    О: Да, для эмулятора и многих функций — можно; но реальное устройство может потерять драйверы (модем, камера).
  • С: Как ускорить повторные сборки?
    О: Используйте ccache, инкрементальную сборку (m ), многопоточность и избегайте полной очистки out/.
  • С: Где взять device tree для моего телефона?
    О: Поискать в репозиториях сообществ (форки, GitHub/GitLab) — часто готовые device/vendor есть для популярных моделей.

AOSP — большой проект, но пошаговый подход: подготовить окружение, корректно инициализировать манифест, синхронизировать исходники, настроить device/vendor/kernel и собрать образ — позволит получить рабочую прошивку или эмуляторный образ для тестирования и разработки.