Как сделать свою прошивку для Android: пошаговое руководство

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

Кастомная прошивка — это модифицированная или собранная с нуля версия Android на базе открытого исходного кода AOSP (Android Open Source Project) или его производных, таких как LineageOS, crDroid или Pixel Experience. В этой статье разберём полный цикл: от подготовки компьютера до прошивки готового образа, а также типичные ошибки сборки и способы их диагностики.

Что нужно знать перед началом работы

Прежде чем приступать, трезво оцените задачу. Сборка прошивки — это не «установка приложения», а полноценная компиляция операционной системы из исходников, которая требует заметных ресурсов и времени. Первая сборка занимает от нескольких часов даже на мощном компьютере, а объём скачиваемых исходников исчисляется десятками гигабайт.

Проверьте три ключевых момента:

  • 🔓 Разблокировка загрузчика — поддерживает ли производитель вашей модели разблокировку bootloader и не лишает ли это гарантии;
  • 🌳 Device tree — есть ли на GitHub или GitLab репозиторий дерева устройства именно для вашей модели и ревизии;
  • 💾 Ресурсы ПК — желательно не менее 16 ГБ оперативной памяти и 200–300 ГБ свободного места на диске;
  • 🐧 ОС для сборки — требуется 64-битный Linux (чаще всего Ubuntu LTS) или WSL2 на Windows.

⚠️ Внимание: прошивка самосборной системы аннулирует гарантию у большинства производителей и может превратить устройство в «кирпич» при ошибке. Обязательно сделайте полный бэкап данных и сохраните стоковую прошивку для отката — её обычно можно найти на официальном сайте производителя или профильных форумах вроде 4PDA и XDA.

Подготовка среды сборки на Linux

Стандартная среда сборки AOSP — это Ubuntu актуальной LTS-версии. Вам понадобится установить пакеты зависимостей: компиляторы, библиотеки, Git, Java Development Kit и утилиту repo, которая управляет сотнями git-репозиториев исходников Android одновременно.

Установка базовых зависимостей обычно выглядит так (точный список пакетов зависит от версии Android и дистрибутива — сверяйтесь с официальной документацией AOSP):

sudo apt update

sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip openjdk-11-jdk

Далее устанавливается утилита repo — скачайте её в ~/bin и добавьте этот каталог в переменную PATH. После этого создайте рабочую директорию, например ~/android/lineage, и инициализируйте в ней репозиторий выбранной прошивки.

Скачивание исходного кода

Исходники скачиваются командой repo init с указанием манифеста прошивки, а затем repo sync — именно на этом этапе загружаются десятки гигабайт кода. Для LineageOS инициализация выглядит примерно так:

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

repo sync -j$(nproc)

Флаг -j задаёт число параллельных потоков загрузки. Если соединение нестабильное, синхронизация может обрываться — в этом случае просто повторите repo sync, уже скачанные данные не потеряются. Учтите, что ветка манифеста (например, lineage-21.0) должна соответствовать версии Android, которую поддерживает дерево вашего устройства.

После синхронизации нужно добавить дерево устройства, общие ресурсы вендора и ядро. В LineageOS для этого есть удобный механизм: команда breakfast <кодовое_имя> автоматически подтянет зависимости по файлу lineage.dependencies из дерева устройства. Кодовое имя модели (например, ginkgo для Redmi Note 8) уточняйте на странице устройства на XDA или в репозитории дерева.

📊 Какая база для кастомной прошивки вам интереснее?
Чистый AOSP
LineageOS
Pixel Experience
crDroid или другой форк

Настройка дерева устройства и проприетарных библиотек

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

Отдельная сложность — проприетарные блобы (proprietary blobs): закрытые бинарные библиотеки от производителя, без которых не работают камера, модем, DSP и другие компоненты. Их извлекают двумя способами:

  • 📦 Из стоковой прошивки устройства через скрипт extract-files.sh, который входит в дерево устройства;
  • 🔗 Из готового репозитория вендора, если мейнтейнеры уже выложили его для вашей модели.

Для извлечения блобов устройство должно быть подключено к ПК с включённой отладкой по USB (ADB), либо у вас должен быть распакованный образ стоковой прошивки. Скрипт запускается из корня исходников и копирует нужные файлы в каталог vendor/.

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

Что делать, если дерева устройства нет

Можно попробовать портировать дерево от близкой модели на том же чипсете, но это задача продвинутого уровня: потребуется править BoardConfig, fstab, конфигурации сенсоров и HAL. Альтернатива — проекты GSI (Generic System Image), которые работают на устройствах с поддержкой Project Treble без индивидуального дерева.

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

Когда исходники, дерево и блобы на месте, запускается сама компиляция. Сначала настраивается окружение и выбирается цель сборки:

source build/envsetup.sh

breakfast <кодовое_имя>

brunch <кодовое_имя>

Команда brunch объединяет выбор цели и запуск сборки. Процесс идёт долго — на среднем ПК первая сборка занимает несколько часов, последующие заметно быстрее за счёт кэша компилятора ccache, который стоит включить заранее через переменную окружения export USE_CCACHE=1.

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

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

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

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

Результат сборки — zip-архив в каталоге out/target/product/<кодовое_имя>/. Дальше нужен разблокированный загрузчик. Процедура разблокировки у каждого производителя своя: у одних достаточно команды fastboot flashing unlock, у других требуется официальная утилита или заявка на сайте производителя. Разблокировка загрузчика стирает все данные на устройстве — делайте бэкап заранее.

Общий порядок установки выглядит так (детали зависят от модели и рекомендаций мейнтейнера дерева):

  • 📲 Перевести устройство в режим fastboot и подключить к ПК;
  • 🛠️ Установить кастомное рекавери (например, LineageOS Recovery или TWRP), если оно требуется инструкцией;
  • 🧹 Выполнить сброс данных (format data) — это обязательно при переходе со стока;
  • 📤 Прошить zip через adb sideload или меню рекавери;
  • 🔄 Перезагрузиться в систему — первая загрузка может занять заметно больше времени, чем обычно.

Если устройство не загружается после прошивки (bootloop), не паникуйте: загрузитесь обратно в рекавери, снимите логи через adb logcat и проверьте, совпадает ли версия блобов с базой прошивки. В крайнем случае всегда можно вернуть стоковую прошивку.

Сравнение баз для кастомной прошивки

Выбор исходной базы влияет на сложность сборки, набор функций и стабильность результата. Ниже — ориентировочное сравнение популярных вариантов:

БазаСложность сборкиОсобенностиКому подходит
Чистый AOSPВысокаяМинимум функций, максимум ручной доработкиРазработчикам и энтузиастам
LineageOSСредняяБольшая база поддерживаемых устройств, документацияНовичкам в сборке
Pixel ExperienceСредняяВнешний вид и приложения как на Google PixelЛюбителям «чистого» Google-интерфейса
crDroid / форкиСредняяМного настроек кастомизацииОпытным пользователям
GSI-образыНизкаяНе требуют сборки, ставятся на Treble-устройстваДля быстрого тестирования

Для первой сборки разумнее всего выбрать LineageOS: у проекта подробная официальная вики, готовые device tree для сотен моделей и предсказуемый процесс. Чистый AOSP потребует самостоятельно решать множество проблем, которые в LineageOS уже исправлены сообществом.

Частые ошибки и их диагностика

Первая сборка редко проходит гладко. Вот проблемы, с которыми сталкиваются чаще всего, и способы их проверки:

Ошибка «ninja: build stopped» — общий симптом сбоя компиляции. Поднимитесь по логу выше и найдите первую конкретную ошибку: обычно это отсутствующий файл блоба или конфликт версий. Нехватка ОЗУ проявляется как внезапное завершение процесса компилятора — уменьшите параллелизм или добавьте swap-файл. Устройство не видно в fastboot — проверьте udev-правила в Linux и установку драйверов.

Если собранная прошивка установилась, но не работает камера, звук или мобильная сеть — почти всегда причина в несоответствии блобов. Проверьте, из какой версии стока они извлечены, и сравните с требованиями в BoardConfig.mk дерева устройства.

FAQ: частые вопросы о своей прошивке Android

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

Напрямую — нет, сборка AOSP официально поддерживается только на Linux и macOS (с ограничениями). На Windows используют WSL2: это работает, но медленнее из-за особенностей файловой системы. Для серьёзной работы лучше выделить отдельный Linux-раздел или виртуальную машину с прямым доступом к диску.

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

Зависит от железа: на ПК с современным многоядерным процессором и SSD — несколько часов, на слабой машине сборка может растянуться на сутки. Повторные сборки с включённым ccache проходят значительно быстрее, так как пересобираются только изменённые модули.

Нужно ли знать программирование для сборки прошивки?

Для сборки готового дерева устройства достаточно уверенной работы с командной строкой Linux. Программирование понадобится, если вы хотите портировать прошивку на неподдерживаемую модель или добавлять собственные функции — там уже нужны знания C/C++, Java и системы сборки Soong/Make.

Безопасна ли самосборная прошивка?

Она настолько безопасна, насколько вы доверяете источникам дерева устройства и блобов. Собирайте только из открытых репозиториев с прозрачной историей изменений. Учтите, что с разблокированным загрузчиком часть функций (банковские приложения, DRM-контент) может работать некорректно — проверяйте это до перехода на кастом постоянно.

Что делать, если устройство превратилось в «кирпич»?

В большинстве случаев устройство с разблокированным загрузчиком восстанавливается прошивкой стокового образа через fastboot или фирменную утилиту производителя. Полный «hard brick» (когда недоступен даже fastboot) встречается редко и обычно требует сервисных режимов вроде EDL на чипах Qualcomm — такие процедуры зависят от конкретной модели, и их лучше выполнять по проверенным инструкциям с профильных форумов.