Исходный код LineageOS: загрузка, структура и сборка

Разработчик, впервые выполняющий команду repo init для загрузки исходного кода LineageOS, обычно сталкивается с тем, что полная синхронизация дерева занимает десятки гигабайт трафика и несколько часов — и это нормальное поведение, а не зависание процесса. LineageOS — открытый проект на базе Android Open Source Project (AOSP), и весь его исходный код доступен публично, но работа с ним требует понимания структуры репозиториев и инструментов сборки.

В этом материале разберём, где хранится исходный код LineageOS, как его скачать, что понадобится для собственной сборки прошивки и какие типичные ошибки возникают на каждом этапе. Информация ориентирована на тех, кто хочет собрать прошивку под конкретное устройство или изучить код системы.

Где хранится исходный код LineageOS

Основная площадка проекта — GitHub-организация LineageOS, а зеркалом и основной системой ревью кода служит собственный Gerrit проекта. Исходники распределены по сотням отдельных репозиториев: ядро Android, фреймворки, системные приложения, HAL-компоненты и device-specific деревья для каждого поддерживаемого устройства.

Единый список всех репозиториев и их версий для конкретной ветки содержится в манифесте — специальном XML-файле в репозитории android. Именно манифест читает утилита repo при синхронизации, определяя, какие проекты и каких версий нужно выгрузить.

  • 📦 android — манифест со списком всех репозиториев сборки;
  • 🧩 android_frameworks_base — базовый фреймворк системы;
  • 📱 android_device_* — деревья устройств от конкретных вендоров;
  • 🔧 android_kernel_* — исходники ядер для поддерживаемых моделей.

Что нужно для загрузки и сборки

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

Официальная документация проекта рекомендует использовать Linux (чаще всего Ubuntu LTS) как основную систему для сборки. Работа через виртуальную машину возможна, но заметно замедляет компиляцию.

КомпонентНазначениеПримечание
ОС Linux (64-bit)Среда сборкиОбычно Ubuntu LTS или совместимый дистрибутив
Оперативная памятьКомпиляцияЧем больше, тем стабильнее; 16 ГБ — комфортный минимум
Свободное место на дискеИсходники + артефакты сборкиПотребуется порядка 200–300 ГБ и более
repo, gitСинхронизация исходниковrepo — обёртка Google поверх git
JDK, Python, build-пакетыИнструменты компиляцииВерсии зависят от ветки LineageOS

Как скачать исходный код через repo

Инструмент repo — это скрипт-обёртка, разработанная Google для управления множеством git-репозиториев как единым проектом. Сначала его нужно установить и создать рабочий каталог, после чего инициализировать манифест нужной ветки LineageOS.

repo init -u https://github.com/LineageOS/android.git -b lineage-21.0 --git-lfs

Ветка указывается через параметр -b — например, lineage-21.0 соответствует LineageOS 21 на базе Android 14. Номер актуальной ветки уточняйте в официальной вики проекта, так как старые ветки со временем перестают поддерживаться.

repo sync

Команда repo sync загружает все проекты из манифеста. Процесс можно ускорить флагом -j с числом параллельных потоков, а при обрыве — просто запустить синхронизацию повторно: уже скачанное не потеряется.

☑️ Подготовка к загрузке исходников

Выполнено: 0 / 5

⚠️ Внимание: прерывание repo sync на середине не повреждает дерево, но повторный запуск может занять много времени на проверку уже скачанных проектов. Не удаляйте скрытый каталог .repo — в нём хранится состояние синхронизации.

📊 Для чего вам нужен исходный код LineageOS?
Сборка прошивки под своё устройство
Изучение устройства Android
Разработка и доработка системы
Портирование на неподдерживаемую модель

Device tree, vendor и kernel: три недостающих элемента

Одного только дерева AOSP/LineageOS недостаточно для сборки прошивки под конкретный смартфон. Необходимы ещё три компонента, уникальные для каждой модели: device tree (конфигурация устройства), vendor-файлы (проприетарные бинарные блобы от производителя) и kernel source (исходники ядра).

Для официально поддерживаемых устройств эти деревья лежат в той же GitHub-организации LineageOS, а список нужных репозиториев обычно указан в файле lineage.dependencies внутри device tree. Проприетарные vendor-блобы либо берутся из отдельного репозитория TheMuppets, либо извлекаются из стоковой прошивки скриптом extract-files.sh.

Скрипт breakfast из окружения сборки умеет автоматически подтягивать нужные device-деревья по кодовому имени устройства:

source build/envsetup.sh

breakfast <codename>

Откуда берутся проприетарные vendor-файлы

Производители чипов (Qualcomm, MediaTek) не публикуют исходники драйверов для многих компонентов — модема, камеры, графики. Поэтому сборка использует готовые бинарные файлы, извлечённые из официальной прошивки устройства. Это законное ограничение: без этих блобов часть оборудования просто не заработает.

Сборка прошивки из исходников

После синхронизации всех деревьев запускается собственно компиляция. Сначала инициализируется окружение, затем выбирается цель сборки — комбинация устройства и типа сборки (user, userdebug или eng).

source build/envsetup.sh

breakfast <codename>

brunch <codename>

Команда brunch объединяет выбор цели и сборку: она компилирует систему и упаковывает результат в установочный ZIP-архив, который затем прошивается через recovery. Время сборки сильно зависит от железа — на мощной машине это пара часов, на слабой может растянуться на значительно больший срок.

⚠️ Внимание: установка самосборной прошивки требует разблокированного загрузчика, а на большинстве устройств разблокировка стирает все пользовательские данные и может повлиять на гарантию. Сделайте резервную копию заранее и сверьтесь с инструкцией именно для вашей модели.

Типичные ошибки при синхронизации и сборке

Чаще всего проблемы возникают ещё на этапе repo sync: обрывы соединения, ошибки аутентификации GitHub при превышении лимита запросов, конфликты локальных изменений. Большинство из них решается повторным запуском синхронизации или очисткой проблемного проекта.

На этапе компиляции типичны другие сбои: нехватка оперативной памяти (компилятор завершается с ошибкой), отсутствующие пакеты зависимостей, несоответствие версий JDK требованиям ветки. Текст ошибки в логе сборки почти всегда указывает на конкретный модуль — начинайте диагностику с него.

  • 🔄 Ошибка sync: повторите repo sync, при необходимости с меньшим числом потоков;
  • 💾 Out of memory: уменьшите параллелизм сборки или добавьте swap;
  • Ошибки Java: проверьте, что установлена версия JDK, требуемая вашей веткой;
  • 📁 Missing vendor: убедитесь, что vendor-дерево для вашего устройства загружено полностью.

⚠️ Внимание: не редактируйте файлы внутри синхронизированного дерева без системы контроля версий — при следующем repo sync локальные правки могут вызвать конфликты или быть перезаписаны. Для изменений создавайте локальные ветки git.

Изучение кода без полной сборки

Если цель — не собрать прошивку, а просто изучить, как устроена система, полная синхронизация может быть избыточной. Отдельные репозитории удобно просматривать прямо на GitHub или клонировать выборочно через обычный git clone.

Для навигации по коду AOSP и LineageOS также существуют онлайн-инструменты поиска по исходникам Android, где можно искать символы и файлы без локальной копии. Это заметно экономит время и дисковое пространство, когда нужно разобраться в конкретном подсистеме — например, в работе SystemUI или PackageManager.

Часто задаваемые вопросы

Можно ли скачать исходный код LineageOS одним архивом?

Официального единого архива нет — проект состоит из сотен git-репозиториев, и штатный способ загрузки только один: через утилиту repo с манифестом нужной ветки. Сторонние снапшоты дерева встречаются, но их актуальность и целостность не гарантируются.

Сколько места занимают исходники LineageOS?

Само дерево исходников после синхронизации занимает десятки гигабайт, а с учётом артефактов сборки потребуется порядка 200–300 ГБ свободного места и больше. Точный объём зависит от ветки и числа загруженных device-деревьев.

Можно ли собрать LineageOS на Windows или macOS?

Официально поддерживаемая среда сборки — Linux. На Windows обычно используют WSL или виртуальную машину с Ubuntu, на macOS сборка исторически возможна, но требует дополнительной настройки и чаще вызывает проблемы. Для стабильного результата используйте нативный Linux.

Что делать, если для моего устройства нет официального device tree?

Тогда речь идёт о портировании: нужно создать device tree самостоятельно, опираясь на деревья похожих моделей на том же чипсете. Это сложная задача, требующая понимания структуры Android, и готовой универсальной инструкции здесь нет — ориентируйтесь на ветку вашего чипа и опыт сообщества.

Где найти актуальный номер ветки LineageOS?

Список поддерживаемых веток и соответствие версий LineageOS версиям Android публикуется в официальной вики проекта. Перед repo init сверьтесь с ней — устаревшие ветки перестают получать обновления и могут не синхронизироваться корректно.