Сборка Android

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

Настройка среды

Инициализируйте среду с помощью сценария envsetup.sh :

source build/envsetup.sh

или

. build/envsetup.sh

См. сценарий на платформе/build/envsetup.sh для описания связанных команд, включая обед для выбора целевых устройств и тапас для создания отдельных приложений, таких как эталонное ТВ-приложение .

Вам необходимо повторно вводить эту команду после каждой repo sync , чтобы отслеживать любые изменения в этом скрипте. Обратите внимание, что замена source на . (одна точка) экономит несколько символов, а короткая форма чаще используется в документации.

Сценарий envsetup.sh импортирует несколько команд, позволяющих работать с исходным кодом Android, включая команды, используемые в этом упражнении.

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

hmm

Выбор цели

обед

Выберите, какую цель построить за lunch . lunch product_name - build_variant выбирает product_name в качестве продукта для сборки и build_variant в качестве варианта для сборки, и сохраняет эти выборки в среде для чтения при последующих вызовах m и других подобных команд.

Точная конфигурация может быть передана в качестве аргумента. Например, следующая команда относится к полной сборке эмулятора со всей включенной отладкой:

lunch aosp_arm-eng

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

Все цели сборки имеют форму BUILD-BUILDTYPE , где BUILD — это кодовое имя, относящееся к конкретной комбинации функций. BUILDTYPE — одно из следующих.

Тип сборки Использовать
пользователь Ограниченный доступ; подходит для производства
пользовательская отладка Как пользователь, но с root-доступом и возможностью отладки; очень близко к производственным характеристикам
англ Конфигурация разработки с более быстрым временем сборки; наиболее подходит для ежедневного развития

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

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

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

echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Дополнительную информацию о сборке и работе на реальном оборудовании см. в разделе «Прошивка устройств» .

тапас

Команда tapas настраивает сборку отдельных приложений. Он выбирает отдельные приложения, которые будут созданы системой сборки Android. В отличие от lunch , tapas не требует создания изображений для устройства.

Запустите tapas help , чтобы получить дополнительную информацию о команде.

Создание кода

Этот раздел представляет собой краткое описание, позволяющее убедиться в завершении настройки.

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

m

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

  • droid - m droid нормальной сборки. Эта цель находится здесь, потому что цель по умолчанию требует имени.
  • allm all создает все, что делает m droid , плюс все, что не имеет тега droid . Сервер сборки запускает это, чтобы убедиться, что все, что находится в дереве и имеет файл Android.mk , строится.
  • m — Запускает сборки с вершины дерева. Это полезно, поскольку вы можете запускать make из подкаталогов. Если у вас установлена ​​переменная среды TOP , она использует ее. Если вы этого не сделаете, он просматривает дерево из текущего каталога, пытаясь найти вершину дерева. Вы можете либо построить все дерево исходного кода, запустив m без аргументов, либо построить конкретные цели, указав их имена.
  • mma — собирает все модули в текущем каталоге и их зависимости.
  • mmma — собирает все модули в предоставленных каталогах и их зависимости.
  • crootcd к вершине дерева.
  • clean - m clean удаляет все выходные и промежуточные файлы для этой конфигурации. Это то же самое, что и rm -rf out/ .

Запустите m help , чтобы увидеть, какие еще псевдоцели предоставляет m .

Запуск сборки

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

Прошивка с помощью фастбута

Чтобы прошить устройство, используйте fastboot , который должен быть включен в ваш путь после успешной сборки. Инструкции см. в разделе «Прошивка устройства» .

Эмуляция Android-устройства

Эмулятор автоматически добавляется в ваш путь в процессе сборки. Чтобы запустить эмулятор, введите:

emulator

Понимание отпечатков пальцев сборки

Чтобы отслеживать и сообщать о проблемах, связанных с конкретной сборкой Android, важно понимать «отпечаток» сборки. Отпечаток сборки — это уникальная, удобочитаемая строка, содержащая информацию о производителе, присвоенную каждой сборке. Точный синтаксис см. в описании FINGERPRINT в разделе «Параметры сборки» документа определения совместимости Android (CDD).

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

Отпечаток сборки инкапсулирует все детали реализации Android:

  • API: Android и нативные, а также поведение программного API.
  • Базовый API и некоторое поведение системного пользовательского интерфейса
  • Требования совместимости и безопасности, определенные в CDD.
  • Спецификации продукта и настройки функций использования, используемые приложениями для целевых устройств, отвечающих ожидаемым требованиям.
  • Внедрение аппаратных и программных компонентов

Подробную информацию см. в CDD , а инструкции по созданию совершенно нового устройства Android — в разделе «Добавление нового устройства».

Устранение распространенных ошибок сборки

Неправильная версия Java

Если вы пытаетесь создать версию Android, несовместимую с вашей версией Java, make работу с помощью такого сообщения:

************************************************************
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 . Убедитесь, что вы выполнили действия, описанные в разделах «Настройка среды» и «Выбор цели» .
  • На вашем пути появится еще один ранее установленный JDK. Добавьте правильный JDK в начало пути или удалите проблемный JDK.

Нет разрешения USB

По умолчанию в большинстве систем Linux непривилегированные пользователи не имеют доступа к USB-портам. Если вы видите ошибку «Отказано в разрешении», следуйте инструкциям в разделе «Настройка доступа по USB ».

Если ADB уже запущен и не может подключиться к устройству после настройки этих правил, вы можете убить его с помощью adb kill-server . Эта команда приводит к перезапуску ADB с новой конфигурацией.