Как собрать свою прошивку Android из исходного кода

Сборка собственной прошивки Android начинается не с кнопки «Build», а с проверки, открыт ли исходный код для вашего устройства: без опубликованного производителем дерева устройства (device tree), вендорных бинарных файлов и исходников ядра собрать рабочий образ не получится, сколько бы мощным ни был компьютер. Именно отсутствие этих компонентов — главная причина, по которой 90% попыток собрать кастомную прошивку заканчиваются ошибкой ещё до начала компиляции.

В этой статье разберём полный цикл: от подготовки сборочной машины на Linux до загрузки исходников AOSP через repo, настройки окружения, компиляции и установки результата на смартфон. Материал ориентирован на тех, кто уже знаком с командной строкой Linux и понимает базовые принципы работы Android.

Что нужно понять перед началом сборки

Android — это открытая система, и её базовый код публикуется в проекте AOSP (Android Open Source Project). Однако «чистый» AOSP сам по себе не загрузится на конкретном смартфоне: ему нужны драйверы и конфигурация под конкретное железо. Поэтому сборка прошивки — это всегда комбинация трёх слоёв: исходники системы, дерево устройства и проприетарные бинарные компоненты вендора.

Отсюда следует главный практический вывод: проще всего собирать прошивку для устройств с хорошей поддержкой сообщества — например, для моделей Google Pixel, для которых Google публикует фабричные образы, бинарные драйверы и исходники ядра. Для аппаратов с закрытым загрузчиком и без опубликованных исходников ядра самостоятельная сборка либо невозможна, либо потребует обратного инжиниринга.

Требования к компьютеру и программному окружению

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

  • 💻 Оперативная память: желательно 16 ГБ и больше; на 8 ГБ сборка современных версий Android часто падает с ошибками нехватки памяти.
  • 💾 Диск: минимум 250–400 ГБ свободного места, предпочтительно SSD — на HDD выкачивание исходников и сборка займут в разы больше времени.
  • 🐧 ОС: 64-битный дистрибутив Linux, официально поддерживается Ubuntu LTS. Сборка на Windows и macOS официально не поддерживается.
  • ⚙️ Процессор: чем больше ядер, тем быстрее идёт компиляция — сборка распараллеливается.

Точные требования меняются от версии к версии Android, поэтому перед началом сверьтесь с актуальным разделом документации AOSP о требованиях к сборочному окружению. Если свободного диска или памяти не хватает, альтернатива — аренда облачного сервера с подходящими характеристиками.

Установка инструментов и загрузка исходников

Первым делом установите необходимые пакеты. В документации AOSP приведён актуальный список зависимостей для каждой поддерживаемой версии Ubuntu; обычно это компиляторы, библиотеки, git, python и инструменты сборки. Также понадобится утилита repo — менеджер репозиториев Google, который управляет сотнями git-репозиториев, из которых состоит Android.

Установка repo выполняется так:

mkdir -p ~/bin

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

Далее создайте рабочую директорию, инициализируйте репозиторий с нужной веткой (тегом) Android и запустите синхронизацию:

mkdir aosp && cd aosp

repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r1

repo sync -j$(nproc)

Конкретный тег версии выбирайте из официального списка тегов и сборок AOSP — он должен соответствовать уровню обновления безопасности, который вы хотите получить. Синхронизация скачивает десятки гигабайт и при нестабильном соединении может прерываться; в этом случае просто повторите repo sync — загрузка продолжится с места обрыва.

⚠️ Внимание: не прерывайте repo sync отключением сети или перезагрузкой на середине — повреждённые репозитории могут потребовать повторной полной синхронизации. Если процесс завис, проверьте соединение и запустите команду заново.
📊 Какая у вас цель при сборке собственной прошивки Android?
Изучение устройства системы
Удаление лишних приложений и сервисов
Сборка кастомной прошивки для своего устройства
Портирование Android на новое железо

Дерево устройства, вендорные бинарники и ядро

После загрузки AOSP у вас есть только «скелет» системы. Чтобы прошивка заработала на конкретном смартфоне, добавьте три компонента.

Device tree — конфигурационные файлы устройства: параметры разделов, флаги компиляции, список включаемых пакетов. Для поддерживаемых сообществом устройств деревья публикуются на GitHub в организациях вроде LineageOS или в репозиториях независимых разработчиков. Для Pixel часть конфигураций доступна прямо в AOSP.

Вендорные бинарники — закрытые драйверы (GPU, модем, камера, аудио). Для Google Pixel их можно скачать с официальной страницы драйверов Google и распаковать в дерево исходников. Для других устройств бинарники извлекают из стоковой прошивки скриптами extract-files.sh, которые обычно идут вместе с device tree.

Ядро. Производители обязаны публиковать исходники ядра по лицензии GPL — их стоит искать на официальных порталах для разработчиков соответствующего бренда. Для многих устройств используются прекомпилированные ядра из стоковой прошивки, что упрощает сборку, но ограничивает модификации.

Что такое lunch и combo в сборке Android

После настройки окружения командой source build/envsetup.sh нужно выбрать цель сборки командой lunch. Она определяет устройство и тип сборки: user (релизная, без отладки), userdebug (с root-доступом через adb для тестов) или eng (инженерная, максимум отладочных инструментов). Для повседневного использования обычно выбирают userdebug или user.

Компиляция прошивки

Когда исходники, дерево устройства и бинарники на месте, настройте окружение и запустите сборку:

source build/envsetup.sh

lunch aosp_crosshatch-userdebug

make -j$(nproc)

Вместо aosp_crosshatch подставьте кодовое имя вашей цели, доступное в списке lunch. Первая сборка занимает от пары часов на мощной машине до суток на слабой — это нормально. Повторные сборки после небольших правок идут значительно быстрее благодаря инкрементальной компиляции.

  • 🔥 Ошибка нехватки памяти: уменьшите параллелизм, например make -j4, или добавьте swap-файл.
  • 🧩 Ошибка в конкретном модуле: читайте лог выше строки FAILED — обычно там указана реальная причина (отсутствующий файл, конфликт версий).
  • 🧹 Странные сбои после правок: выполните make clean и соберите заново.
  • 📁 Результат: готовые образы лежат в каталоге out/target/product/<устройство>/ — там появятся boot.img, system.img и другие разделы.

☑️ Проверка перед запуском компиляции

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

Прошивка собранного образа на устройство

Для установки собранной прошивки загрузчик устройства должен быть разблокирован. Процедура разблокировки зависит от производителя: на Pixel это команда fastboot flashing unlock, у других брендов — свои механизмы, вплоть до официальных заявок на разблокировку. Точную процедуру для вашей модели смотрите в официальной документации производителя — универсальной комбинации не существует.

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

Загрузив устройство в режим fastboot, прошейте образы:

fastboot flash boot boot.img

fastboot flash system system.img

fastboot flash vendor vendor.img

fastboot -w reboot

Набор разделов зависит от устройства и версии Android: на современных аппаратах с динамическими разделами часто используется команда fastboot flashall или fastboot update с zip-пакетом. Если устройство не загружается после прошивки (bootloop), возможная причина — несовпадение вендорных бинарников с версией сборки; вернитесь к шагу извлечения бинарников и сверьте версии.

Сборка кастомной прошивки на базе LineageOS и альтернативы

Полная сборка с нуля из AOSP — не единственный путь. Если цель — получить прошивку с изменениями для конкретного устройства, часто разумнее собирать на базе готового кастомного проекта, где device tree и бинарники уже поддерживаются сообществом.

ПодходСложностьКому подходит
Сборка чистого AOSPВысокаяРазработчики, владельцы Pixel, портирование на новое железо
Сборка LineageOS из исходниковСредняяВладельцы официально поддерживаемых устройств
Модификация стоковой прошивки (кухни, распаковка образов)СредняяТочечные правки без полной пересборки
Сборка только ядра (kernel)СредняяТюнинг производительности и энергосбережения

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

Типичные ошибки и как их диагностировать

Большинство проблем при сборке и прошивке сводится к нескольким повторяющимся сценариям. Знание их экономит часы отладки.

Сборка падает на случайных модулях. Обычно это нехватка ОЗУ или места на диске. Проверьте df -h и free -h, уменьшите число потоков сборки.

Устройство не определяется в fastboot. Проверьте udev-правила в Linux, качество USB-кабеля и порт — лучше использовать порт напрямую на материнской плате, без хабов.

Bootloop после прошивки. Возможные причины: несовпадение версии вендорных бинарников и системы, прошивка не всех необходимых разделов, повреждённый boot-образ. Порядок действий: прошейте стоковый образ обратно, убедитесь, что устройство работает, затем повторите процесс, сверяя каждый шаг.

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

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

Можно ли собрать прошивку Android на Windows?

Официально сборка AOSP поддерживается только на Linux. Теоретически можно использовать виртуальную машину или WSL2, но производительность и стабильность будут заметно ниже, а часть инструментов может работать некорректно. Рекомендуемый вариант — отдельная машина или раздел с Ubuntu LTS.

Сколько времени занимает первая сборка?

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

Можно ли собрать прошивку для устройства без исходников от производителя?

Практически нет. Без device tree, вендорных бинарников и исходников ядра рабочую прошивку не собрать. Максимум, что возможно, — модификация готовой стоковой прошивки (распаковка, правка и перепаковка образов), но это другой класс задач.

Нужен ли root для установки собранной прошивки?

Нет. Для прошивки через fastboot нужен разблокированный загрузчик, а не root-доступ. Более того, сборка типа user уже лишена root, а userdebug предоставляет root через adb для отладки.

Чем сборка из исходников отличается от установки готовой кастомной прошивки?

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