Сборка Android

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

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

Из своего рабочего каталога запустите скрипт 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 с открытым исходным кодом.
    • (необязательно) 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 предоставляет некоторые псевдоцели, называемые целями . Например, m nothing ничего не собирает, но анализирует и проверяет структуру сборки. Чтобы получить список допустимых целей, введите m help .

Устранение ошибок сборки (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.