构建 Android

请按照本页中的说明构建 Android。

设置构建环境

在您的工作目录中,获取 envsetup.sh 脚本的源代码以设置构建环境:

source build/envsetup.sh

此脚本会导入若干命令(包括本页中使用的命令),让您能够使用 Android 源代码。如需查看脚本的源代码,请参阅 platform/build/envsetup.sh。如需查看内置帮助,请输入 hmm

选择目标

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

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

查看当前目标

如需查看当前的启动设置,请运行以下命令:

echo "$TARGET_PRODUCT-$TARGET_RELEASE-$TARGET_BUILD_VARIANT"

表示目标的字符串采用以下格式:

lunch product_name-release-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 设置为 trunk_staging

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

    build_variant 说明
    user 此 build 变体提供有限的安全访问权限,适用于生产环境。
    userdebug 此 build 变体可帮助设备开发者了解开发中版本的性能和功耗。使用 userdebug build 进行开发时,请遵循 userdebug 指南
    eng 此 build 变体的构建时间更短,如果您不在意性能和功耗,它最适合用于日常开发。

如果在未使用任何参数的情况下运行 lunch,系统会提供常见目标的列表。 您还可以创建自己的目标字符串,方法是使用本页上的信息以及设备代号中代表特定 Google 硬件的代号将目标字符串的元素组合在一起。

构建代码

运行以下命令以构建目标。根据工作站的规范,首次构建可能需要不到一小时,最长可达数小时。后续构建所需的时间会大大减少。

$ m

您应看到的第一个输出是目标和构建环境的概要:

============================================
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
============================================

build 的输出会显示在 $OUT_DIR 中。如果您构建不同的目标,则每个目标 build 都会显示在 $OUT_DIR 中。

m 命令从树的顶部构建,因此您可以从子目录中运行 m。如果您设置了 TOP 环境变量,m 命令会使用该变量。如果未设置 TOPm 命令会查找当前目录中的树,尝试找到树的顶层。

m 命令可以使用 -jN 参数处理并行任务。如果您没有提供 -j 参数,构建系统会自动选择其认为最适合您系统的并行任务计数。

如果您要构建特定模块,而不是构建完整的设备映像,则可以在 m 命令行中列出模块名称来实现。此外,m 命令还提供了一些伪目标,称为“伪目标”(goal)。例如,m nothing 不会构建任何内容,但会解析和验证 build 结构。如需查看有效伪目标的列表,请输入 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
************************************************************

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

  • 未能按照针对 AOSP 开发进行设置 (2.3 - 8.0) 的 JDK 部分中的规定安装的正确 JDK。
  • 您的路径中出现了另一个之前安装的 JDK。将正确的 JDK 附加到路径开头,或者移除有问题的 JDK。