Разработчик, впервые выполняющий команду 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 с числом параллельных потоков, а при обрыве — просто запустить синхронизацию повторно: уже скачанное не потеряется.
☑️ Подготовка к загрузке исходников
⚠️ Внимание: прерывание
repo syncна середине не повреждает дерево, но повторный запуск может занять много времени на проверку уже скачанных проектов. Не удаляйте скрытый каталог.repo— в нём хранится состояние синхронизации.
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 сверьтесь с ней — устаревшие ветки перестают получать обновления и могут не синхронизироваться корректно.