构建 Android

按照此页面上的说明构建 Android。

设置您的构建环境

在您的工作目录中,source envsetup.sh 脚本以设置您的构建环境

source build/envsetup.sh

此脚本导入了多个命令,可让您使用 Android 源代码,包括此页面上使用的命令。要查看脚本的源代码,请参阅 platform/build/envsetup.sh。要查看内置帮助,请键入 hmm

选择目标

在构建 Android 之前,您必须确定要构建的目标。目标反映了您要构建的目标平台。要确定要构建的目标,请使用 lunch 命令,后跟一个表示目标的字符串。例如

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

您应该看到的是您的目标和构建环境的概要

============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================

表示目标的字符串具有以下格式

lunch product_name-release_config-build_variant

此字符串的组成部分是

  • product_name 是您要构建的产品的名称,例如 aosp_cf_x86_64_phoneaosp_husky。您的特定 product_name 可以遵循您自己设备的格式,但 Google 用于其设备的格式具有以下组成部分

    • aosp 指的是 Android 开放源代码平台。
    • (可选)当目标旨在 Cuttlefish 模拟器中运行时,会包含 cf
    • 架构和硬件(代号),例如 x86_64_phonehusky,它是 Pixel 8 Pro 的代号。有关 Google 设备代号的列表,请参阅 设备代号
  • release_config 设置为发布配置,例如名为 trunk_staging 的开发发布配置。发布配置标识功能启动标志背后的一些功能和代码,这些功能和代码在构建时启用或禁用。有关发布配置的更多信息,请参阅 设置功能标志启动值

  • 字符串的 build_variant 部分可以是下表中的三个值之一

    build_variant 描述
    user 此构建变体提供有限的安全访问权限,适合用于生产。
    userdebug 此构建变体可帮助设备开发者了解开发中版本的性能和功耗。使用 userdebug 构建进行开发时,请遵循 userdebug 指南
    eng 如果您不关心性能和功耗,则此构建变体具有更快的构建时间,最适合日常开发。

如果您在不带任何参数的情况下运行 lunch,则会提供常见目标的列表。您还可以使用此页面上的信息以及 设备代号 中代表特定 Google 硬件的代号,将目标字符串的元素拼凑在一起,从而创建自己的目标字符串。

查看当前目标

要查看当前的 lunch 设置,请运行

$ 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://aosp.org.cn/source/initializing.html
************************************************************

以下是可能的原因和解决方案

  • 您未能按照 设置 AOSP 开发环境(2.3 - 8.0) 的 JDK 部分中的规定安装正确的 JDK。
  • 您的路径中出现了另一个先前安装的 JDK。将正确的 JDK 添加到路径的开头,或删除有问题的 JDK。