Сборка Android

Следуйте инструкциям на этой странице, чтобы собрать Android.

Настройте среду сборки.

В рабочей директории выполните команду `source envsetup.sh для настройки среды сборки:

source build/envsetup.sh

Этот скрипт импортирует несколько команд, позволяющих работать с исходным кодом Android, включая команды, используемые на этой странице. Чтобы просмотреть исходный код скрипта, обратитесь к файлу platform/build/envsetup.sh . Чтобы просмотреть встроенную справку, введите hmm .

Выберите цель

Перед сборкой Android необходимо определить целевую платформу. Целевая платформа — это платформа, для которой выполняется сборка. Чтобы указать целевую платформу, используйте команду ` lunch , за которой следует строка, представляющая эту платформу. Например:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

Вы должны увидеть краткое описание вашей целевой среды и среды сборки:

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

Строка, представляющая целевой объект, имеет следующий формат:

lunch product_name-release_config-build_variant

Составляющие этой строки:

  • product_name — это название продукта, который вы хотите создать, например, aosp_cf_x86_64_only_phone или aosp_husky . Ваше конкретное product_name может соответствовать формату вашего устройства, но формат, используемый Google для своих устройств, включает следующие компоненты:

    • aosp означает Android Open Source Platform (платформа с открытым исходным кодом для Android).
    • (необязательно) cf включается, если предполагается, что целевой объект будет запущен в эмуляторе Cuttlefish.
    • Архитектура и аппаратное обеспечение (кодовое имя), например, x86_64_only_phone или husky , — это кодовое имя для Pixel 8 Pro. Список кодовых имен устройств Google см. в разделе « Кодовые имена устройств» .
  • release_config задается конфигурацией релиза , например, конфигурацией релиза для разработки под названием aosp_current . Конфигурация релиза определяет определенные функции и код, которые находятся за флагами запуска функций и либо включены, либо отключены для сборки. Дополнительную информацию о конфигурациях релизов см. в разделе «Установка значений флагов запуска функций» .

  • В строке, в части build_variant может быть одно из трех значений, указанных в следующей таблице:

    build_variant Описание
    user Этот вариант сборки обеспечивает ограниченный доступ к системе безопасности и подходит для
    производство. userdebug Этот вариант сборки помогает разработчикам устройств.

    Поймите производительность и возможности разрабатываемых версий. При разработке с использованием сборки userdebug следуйте рекомендациям для userdebug . eng | Этот вариант сборки обеспечивает более быстрое время сборки и лучше всего подходит для повседневной разработки, если вас не волнуют производительность и энергопотребление.

Если вы запустите lunch без каких-либо аргументов, будет предоставлен список распространенных целей. Вы также можете создать свои собственные целевые строки, собрав элементы целевой строки, используя информацию на этой странице и кодовые имена, представляющие конкретное оборудование Google, на странице "Кодовые имена устройств" .

Просмотреть текущую цель

Чтобы посмотреть текущие настройки обеда, выполните следующую команду:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Скомпилируйте код

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

m

Результаты сборки отображаются в $OUT_DIR . Если вы собираете разные цели, результаты сборки каждой цели будут отображаться в $OUT_DIR .

Команда m выполняет сборку с вершины дерева, поэтому вы можете запускать m из подкаталогов. Если у вас установлена ​​переменная среды TOP , команда m использует её. Если TOP не установлена, команда m ищет вершину дерева, начиная с текущего каталога.

Команда m может обрабатывать параллельные задачи с аргументом -jN . Если аргумент -j не указан, система сборки автоматически выберет оптимальное для вашей системы количество параллельных задач.

Вы можете собрать отдельные модули вместо полного образа устройства, указав имена модулей в командной строке m . Кроме того, команда m предоставляет несколько псевдоцелей, называемых задачами (goals) . Например, команда m nothing ничего не собирает, но анализирует и проверяет структуру сборки. Чтобы получить список допустимых задач, введите m help .

Устранение ошибок сборки (Android 17 или выше)

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

Попытка сборки приводит к ошибкам файловой системы, доступной только для чтения.

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

  • Чтобы перевести весь исходный код в режим чтения и записи во время сборки, добавьте BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true в параметры среды сборки.

  • Чтобы изменить права доступа на чтение и запись для части дерева во время сборки, используйте BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST=" path1 , path2 , ... "

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

Устранение ошибок сборки (версии 8.0 и более ранние)

Если вы собираете AOSP 8 или более раннюю версию, m может прерваться при обнаружении проблемы с вашей версией Java. Например, вы можете получить следующее сообщение:

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

Вот вероятные причины и решения:

  • Вам не удалось установить правильную версию JDK, указанную в разделах JDK руководства «Настройка для разработки AOSP (2.3 - 8.0)» .
  • В вашем пути отображается другой ранее установленный JDK. Добавьте правильный JDK в начало пути или удалите проблемный JDK.