Как да изградите Android от изходния код стъпка по стъпка: Пълно ръководство 2024

  • Изграждането на Android изисква внимателна подготовка на средата, тъй като включва инструменти, конфигурация на променливи, зависимости и ресурси, които могат да варират в зависимост от версията на Android и целевото устройство.
  • Не само е възможно да се компилира чист Android (AOSP), но и да се адаптира процесът към персонализирани ROM-ове, специфични приложения или дори устройства за домашна автоматизация, стига да имате собствените blob-ове и подходящата конфигурация.
  • Процесът включва изтегляне на код, интеграция на двоични файлове, персонализиране и тестване; Освен това има инструменти за автоматизиране и ускоряване на част от работата, както и решения за разпределена компилация и непрекъсната интеграция.

как да компилирам Android

Замисляли ли сте се някога да създадете своя собствена версия на Android от изходния код? Истината е, че макар на пръв поглед да изглежда като предизвикателство запазено за програмисти С опит, това всъщност е процес, постижим от всеки, който има основни компютърни умения, търпение и желание за експериментиране. Става въпрос за компилиране на Android, опция, която не само отваря огромен набор от възможности за персонализиране, но и предлага уникално техническо обучение: ще получите по-задълбочено разбиране за това как всъщност работи операционната система, която носите в джоба си всеки ден.

През последните години интересът към компилирането на собствени версии на Android нарасна, особено благодарение на появата на персонализирани ROM-ове и дълготрайността на много устройства. Независимо дали адаптирате системата към конкретно устройство, възкресявате стар телефон или просто изпитвате удовлетворението от създаването на собствен фърмуер, това е преживяване, което е едновременно предизвикателно и възнаграждаващо. Ако се чудите откъде да започнете, от какво се нуждаете или как да преодолеете често срещани препятствия, това изчерпателно ръководство ще ви преведе през всяка стъпка, предоставяйки актуална информация и нюанси от множество официални източници, експертни форуми и технически ръководства.

Какво означава да компилираш Android от изходния код?

Създаването на Android означава трансформиране на отворения код на операционната система в работещ образ, който може да бъде инсталиран и стартиран на устройство. Резултатът може да бъде пълен ROM, образ за възстановяване, модифицирано ядро ​​или дори персонализирано приложение, съобразено с вашите нужди. За разлика от обикновената инсталация на приложение, този процес ви потапя в самото сърце на операционната система, позволявайки ви да променяте, активирате или премахвате функции, да персонализирате интерфейса и много други.

Графика на мобилно приложение.
Свързана статия:
Най-добрите IDE за програмиране на вашия Android телефон през 2025 г.: Пълно ръководство и сравнение

Процесът не е ограничен само до експертни разработчици или големи компании; Всеки мотивиран потребител може да постигне това. Единственото изискване е да имате основни знания и достатъчно време за подготовка на средата и извършване на необходимите тестове. Въпреки че има инструменти за автоматизация и графични среди, които опростяват някои задачи, познаването на основните команди, скриптове и стъпки ще ви помогне да преодолеете повечето проблеми.

Подготовка на средата: Предварителни изисквания

стъпки за компилиране на Android

Преди да се впуснете в приключението си, е важно да сте наясно от какво оборудване се нуждаете и на какви условия трябва да отговаря то:

  • Компютър с 64-битова Linux версияПрепоръчително е да използвате стабилна дистрибуция (Ubuntu, Debian, Fedora…). Възможно е да се компилира на Mac, въпреки че процесът изисква инсталиране на допълнителни инструменти (като Xcode, gmake, libsdl, git-core и gnupg). Компилирането в Windows не е директно осъществимо, освен ако не използвате виртуална машина или WSL.
  • RAM и съхранение: RAM е ключово. В идеалния случай трябва да имате поне 16 GB, въпреки че можете да работите и с по-малко, ако приемате по-дълги времена на чакане или ако използвате каче за ускоряване на прекомпилирането. Дисково пространство Това е от решаващо значение, тъй като изходният код и двоичните файлове лесно заемат повече от 100 GB.
  • Java (JDK)Инсталирайте версията, която съответства на версията на Android, която искате да компилирате. Например, за Android 8.0 ви е необходим специфичен JDK. Важно е да не смесвате версии на Java, за да избегнете грешки при компилация.
  • Основни инструментиЩе ви трябват отивам за управление на кода, Питон за някои скриптове и каче за оптимизиране на процеса. Други зависимости могат да включват flex, bison, gperf, build-essential, zip, curl, libncurses5-dev, zlib1g-dev и различни пакети за разработка (варират в зависимост от избраната дистрибуция).
  • Android SDK и инструменти за платформатаЗа работа с физически устройства и емулатори, инструментите SDK и adb/fastboot са от съществено значение. Можете да го инсталирате от официалните хранилища или от уебсайта на Google.

В професионални среди за разработка или за автоматизирани компилации (CI/CD) е обичайно да се използват и Azure Pipelines, AWS Device Farm или подобни. Тези платформи позволяват изграждане и тестване в облак, улеснявайки непрекъснатата интеграция и бързото предоставяне на персонализирани версии.

Първоначална конфигурация на средата за компилация

След като системата е готова, следващата стъпка е да се настрои средата за безпроблемно разработване и компилиране. Това включва както получаване на изходния код, така и конфигуриране на допълнителни променливи, скриптове и помощни програми. Най-често срещаните стъпки са описани подробно по-долу:

1. Инсталиране на хранилища и зависимости

Започнете с инсталирането на пакетите, които ще ви позволят да изтеглите и компилирате изходния код на Android. Използвайте мениджъра на пакети на вашата система (apt, yum, dnf и др.), за да инсталирате следните инструменти:

  • git-core, gnupg, python3, ccache, zip, unzip, curl, repo, build-essential, openjdk-*, sudo, libncurses5-dev, zlib1g-dev, flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev

Ако използвате Mac, ще ви трябват Xcode, MacPorts и персонализирани версии на гореспоменатите инструменти.

2. Получаване на скрипта „repo“

Скриптът „repo“ е от съществено значение за обработката на изтеглянето и синхронизирането на изходния код на Android. Изтеглете го и го поставете в път, включен във вашия PATH. Пример:

wget https://storage.googleapis.com/git-repo-downloads/repo -O ~/bin/repo
chmod a+x ~/bin/repo

Проверете дали „repo“ работи, като изпълните „repo help“ в терминала.

3. Изтеглете изходния код на Android

Създайте нова директория, в която да хоствате кода и се позиционирайте в нея:

mkdir ~/android-source
cd ~/android-source

Инициализирайте хранилището:

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

Заменете клона с този, който съответства на версията, която искате да компилирате (може да бъде „master“ за най-новата налична версия или специфични клонове за ROM-ове като LineageOS).

Синхронизирайте, за да изтеглите изходния код (това може да отнеме няколко часа):

repo sync

На персонализирани ROM-ове или специфични устройства може да се наложи да изтеглите „local_manifest.xml“ с допълнителните хранилища и да синхронизирате отново.

4. Интегриране на собствени блобове (специфични за доставчици двоични файлове)

За устройства, които изискват собствени библиотеки (напр. драйвери за камери, Wi-Fi и компоненти със затворен контур), трябва да получите тези файлове. Някои проекти ги разпространяват в специални хранилища (като например „TheMuppets“ за LineageOS в GitHub). Процедурата обикновено включва изтегляне на хранилището с blob файлове и стартиране на скрипт, който извлича или интегрира необходимите двоични файлове, често директно от самия телефон чрез ADB:

cd device/fabricante/modelo
./extract-files.sh

Прегледайте скрипта и, ако е необходимо да го промените (например, за да осигурите съвместимост на файловата система или правилни пътища), направете го, преди да го изпълните.

5. Конфигуриране и оптимизация на променливи с ccache

За да ускорите повтарящите се компилации, можете да активирате ccache (кеш за компилации):

export USE_CCACHE=1
ccache -M 50G

Регулирайте размера според RAM паметта и наличното пространство.

Проверете настройките за Android SDK, NDK и други инструменти. Включете пътищата във вашия $PATH и се уверете, че променливите JAVA_HOME, ANDROID_HOME и ANDROID_NDK_HOME сочат към правилните директории.

Разширени текстови редактори за Android-3
Свързана статия:
Разширени текстови редактори за Android: Пълно ръководство и сравнение 2025

Настройка на средата за изграждане на Android с 'envsetup.sh'

Разположен в главната директория на изтегленото хранилище, скриптът „envsetup.sh“ импортира серия от жизненоважни команди за работа с изходния код. За да го активирате, изпълнете:

source build/envsetup.sh

Тази стъпка трябва да се изпълни на всеки нов терминал преди компилиране или избиране на дестинация („обяд“).

Скриптът ви дава команди като „lunch“, „m“, „help“, както и достъп до вътрешни помощни програми за конфигуриране, почистване и отстраняване на грешки.

Избор на целта за изграждане и нейните варианти

Преди компилиране е задължително да се определи за кое конкретно устройство или архитектура ще се създава Android. Ключовата команда е „обяд“, която се изпълнява по следния начин:

lunch product_name-release_config-build_variant

Например:

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  • име_на_продукт: специфичен модел, например aosp_cf_x86_64_phone, aosp_husky или вътрешното име на устройството.
  • release_config: настройки на версията, като например trunk_staging или custom.
  • вариант_на_компилация: определя профила за сигурност и опциите. Може да бъде:
    • потребител: Проектиран за производство, максимална сигурност и без инструменти за отстраняване на грешки.
    • потребителска грешка: подобно на предишния, но с достъп до logcat, root и активно отстраняване на грешки.
    • англ.: чиста среда за разработка, по-бързи компилации и пълен достъп до системата.

Ако не въведем никакви аргументи, „lunch“ ще покаже списък с наличните дестинации за нашето кодово дърво.

Можете да разработвате свои собствени целеви вериги, създавайки специфични за хардуера варианти (напр. модифицирани ядра, поддръжка на APEX, персонализирани HAL или експериментални компилации за Thread или IoT).

Компилиране на изходния код на Android

Значение на компилирането на Android

След като всичко е готово, е време за компилиране. Универсалната команда е 'm', която може да приема аргументи и позволява компилиране от всяка поддиректория, ако е дефинирана променливата TOP.

m

Системата е в състояние да открие колко ядра на процесора да използва, въпреки че паралелизмът може да бъде принуден с аргумента '-jN', където N е броят на едновременните задачи:

m -j8

Първия път процесът може да отнеме няколко часа, в зависимост от хардуера и броя на избраните модули и варианти. Последващите компилации, благодарение на кеширането и повторното използване на предварително компилирани обекти, ще бъдат много по-бързи.

Резултатите (ROM, възстановяване, ядро, двоични файлове, образи и лог файлове) се съхраняват в директорията OUT_DIR, която по подразбиране е 'out/'.

С „m“ можете също да компилирате специфични модули, инструменти или да извършвате специални действия, като например валидиране на структурата на проекта с „m nothing“ или преглед на помощ с „m help“.

Обработка на често срещани грешки и проблеми при компилация

Една от повтарящите се грешки при компилирането на Android е свързана с версията на Java/JDK. Ако използвате грешна версия, „m“ ще спре процеса, като покаже ясно съобщение за несъвместимостта. Уверете се, че инсталирате точната версия, необходима за използвания от вас Android клон, и я добавете към променливата PATH преди всякакви други инсталации на Java. Моля, вижте официалната документация на AOSP и бележките за персонализирани ROM за специфични изисквания.

Други често срещани причини за неуспех включват липсващи зависимости, неправилно модифицирани скриптове или конфликти в blob-овете на собственика. Поддържайте системата си актуална, преглеждайте лог файловете за компилация и участвайте в специални форуми, ако се затрудните на някоя стъпка.

Персонализиране и разширено управление на процеса на изграждане

Не всичко е свързано с компилиране на пълния ROM; Можете да компилирате специфични модули, приложения или дори да работите върху по-напреднали проекти, като например Thread routers или изображения за домашна автоматизация. В тези случаи интегрирането на персонализирани HAL-ове, адаптирането на стартови скриптове и модифицирането на XML файлове са ключови. Официални проекти като AOSP документират как да се добавят, променят или заменят APEX модули, радио интерфейси и други.

androidmanifest
Свързана статия:
Не мога да редактирам AndroidManifest в Android Studio: причини и решения

За разширено тестване, инструменти като VTS (Vendor Test Suite) и CTS (Compatibility Test Suite) ви позволяват да валидирате съвместимостта и устойчивостта на дадена компилация спрямо стандартите на Android. Препоръчително е да ги стартирате, след като сте създали своя собствена версия на Android, особено ако сте направили обширни промени или планирате да разпространявате ROM-а.

Непрекъсната интеграция, тестване и автоматизация на внедряването

Ако целта ви е да поддържате компилациите си актуални, да ги пускате редовно или да ги разпространявате сред бета потребители или тестери, помислете за интегриране на вашата среда с платформи като Azure Pipelines, AWS Device Farm или Google Cloud. Тези инструменти ви позволяват да автоматизирате компилирането, да тествате на физически и виртуални устройства, да подписвате APK файлове и да разпространявате както ROM файлове, така и отделни приложения.

  • Лазурни тръбопроводи: Той поддържа YAML за дефиниране на канали за изграждане, интегриране с хранилища на GitHub и персонализирани задачи за Gradle, тестване, подписване на APK, емулация и дори автоматично внедряване в Google Play.
  • Ферма на устройства AWS: Улеснява автоматизираното тестване на компилации в реална среда на устройство и интеграцията с CI/CD услуги.
  • Център за приложения на Microsoft: Позволява ви да разпространявате компилации на тестери, да провеждате автоматизирани тестове, да подписвате APK файлове и да извършвате бързо внедряване с контролирани версии.

Във всички случаи автоматизацията спестява време, намалява човешките грешки и ускорява цикъла разработка-тестване-пускане на продукта. Освен това, платформи като Google Play имат официални разширения за интегриране на разпространението на компилации и управлението на версиите.

Компилиране на приложения и ROM-ове на други системи за изграждане

Въпреки че Gradle и официалната система на Google са най-широко използваните, има алтернативи като Bazel, който е особено полезен в мащабни проекти и многопроектни среди.

Bazel изисква специална конфигурация чрез MODULE.bazel и BUILD файлове за управление на зависимости, ресурси и правила за изграждане, но позволява разпределени процеси на изграждане и мащабиране в облака. Ако искате да експериментирате с Bazel, ще трябва да го инсталирате, да клонирате хранилището с примери, да създадете конфигурационните файлове и да добавите необходимите зависимости (например с 'bazel_dep').

Стъпките в Базел обикновено са:

  1. Инсталирайте Bazel и Android SDK.
  2. Клонирайте примерния проект.
  3. Създайте и редактирайте MODULE.bazel, за да декларирате зависимости.
  4. Дефинирайте правилата android_library и android_binary в съответните BUILD-ове.
  5. Компилирайте с 'bazel build //src/main:app' и намерете резултата (APK) в bazel-bin/src/main/.
  6. Разгръщайте приложението, използвайки „bazel mobile-install“ и ADB (debugger bridge) за бързо внедряване на устройства или емулатори.

Моля, обърнете внимание, че Bazel не се поддържа официално в Android Studio и има известни ограничения, но е чудесен вариант за тези, които търсят максимална персонализация и производителност.

Структура и конфигурация на ключови файлове в Android проекти

Всеки Android проект разчита на поредица от конфигурационни файлове и скриптове, които дефинират параметри на компилация, зависимости, променливи и пакетиране.

  • настройки.gradle(.kts): дефинира модули и хранилища.
  • build.gradle(.kts): съдържа зависимости, плъгини, версии и варианти за всеки модул.
  • gradle.properties и local.properties: управлявайте глобални свойства и пътища, като например sdk.dir, ndk.dir или cmake.dir. Първият е за общи настройки, вторият е за локални пътища (не поставяйте персонализирани променливи в local.properties!).
  • Изходни набори: src/main, src/debug, src/release, src/flavor… ви позволяват да организирате ресурси и код за специфични варианти.
  • Подписано и опаковано: Всяка компилация трябва да бъде подписана, особено ако планирате да я разпространявате извън средата за разработка. Android Studio и Gradle ви позволяват да дефинирате специфични задачи за използване на защитени хранилища за ключове, управление на бележки за изданието и автоматизиране на процеса.

Не забравяйте, че за персонализирани компилации, конфигурирането на minSdk, targetSdk и compileSdk е от съществено значение, за да се осигури съвместимост и достъп до най-новите API.

Тестване, валидиране и сертифициране на конструкции

След като компилирате ROM или приложение, не забравяйте да извършите обширни тестове на физически устройства и емулатори. В допълнение към официалните инструменти на Google (adb, емулатор, logcat), има тестови стендове и пакети за сертифициране на съвместимост и правилна работа (VTS, CTS, интеграционни тестове, тестове на графичен интерфейс и др.).

За какво е Android Runtime (ART)-0?
Свързана статия:
Android Runtime (ART): какво представлява и как работи

В по-сложни проекти, като например тези, свързани с домашна автоматизация или IoT, е добра идея да се провери интеграцията с Wi-Fi, Thread, Bluetooth и други компоненти, като се използват примерни приложения, инструменти като ThreadNetworkDemoApp или персонализирани модули.

Разширени инструменти и автоматизация

В допълнение към вече споменатите скриптове и системи за изграждане, има помощни програми като ScriBt, които могат да ви помогнат да автоматизирате изтеглянията, да интегрирате зависимости и да създавате насочвани работни пътища. Те са идеални за разработчици, които работят редовно или управляват множество ROM-ове едновременно, тъй като могат да спестят стотици часове при повтарящи се задачи. Те обаче изискват предварително разбиране на структурата на Android и собствеността на съответните хранилища.

Казус: Създаване и инсталиране на примерно приложение със специални SDK

В ситуации, в които трябва да работите със специфични API, като например API за домашна автоматизация (Google Home или Matter), в допълнение към общия Android SDK, е добра идея да изтеглите специфичния изходен код, да инсталирате ръчно библиотеки и да управлявате OAuth идентификационните данни за тестване на реални устройства.

В допълнение към клонирането на хранилището и изграждането му с Android Studio, ще трябва да конфигурирате сертификати за подписване, идентификационни данни за вход и в много случаи да промените имената на пакетите, за да избегнете конфликти в системния регистър.

Ако всичко върви добре, ще имате напълно функционален ROM или приложение на една ръка разстояние, съобразено с вашите нужди, с възможност за персонализиране до най-малкия детайл. Създаването на Android е трудоемък процес, но е и уникална възможност да се учите и да изведете персонализирането на устройството си на следващото ниво. Споделете това ръководство, за да знаят и други хора стъпките, които трябва да следват..