请按照本页中的说明构建 Android。
设置构建环境
在您的工作目录中,获取 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_phone
或aosp_husky
。您的特定product_name
可以遵循您自己的适合您设备的格式,但 Google 为其设备采用的格式包含以下组件:aosp
是指 Android 开源平台。- (可选)如果要在 Cuttlefish 模拟器中运行目标,则包含
cf
。 - 架构和硬件(代号),例如
x86_64_phone
或husky
(这是 Pixel 8 Pro 的代号)。如需查看 Google 设备代号列表,请参阅设备代号。
release_config
设置为版本配置,例如名为trunk_staging
的开发版本配置。版本配置用于标识位于功能发布标志后面的特定功能和代码,并可为 build 启用或停用这些功能和代码。如需详细了解版本配置,请参阅设置功能标志发布值。此字符串的
build_variant
部分可以是下表中的三个值之一:build_variant
说明 user
此 build 变体提供有限的安全访问权限,适用于生产环境。 userdebug
此 build 变体可帮助设备开发者了解开发中版本的性能和功耗。使用 userdebug
build 进行开发时,请遵循 userdebug 指南。eng
此 build 变体的构建时间更短,如果您不在意性能和功耗,它最适合用于日常开发。
如果在未使用任何参数的情况下运行 lunch
,系统会提供常见目标的列表。
您还可以创建自己的目标字符串,方法是使用本页上的信息以及设备代号中代表特定 Google 硬件的代号将目标字符串的元素组合在一起。
查看当前目标
如需查看当前的启动设置,请运行以下命令:
$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
构建代码
运行以下命令以构建目标。根据工作站的规范,首次构建可能需要不到一小时,最长可达数小时。后续构建所需的时间会大大减少。
m
build 的输出会显示在 $OUT_DIR
中。如果您构建不同的目标,则每个目标 build 都会显示在 $OUT_DIR
中。
m
命令从树的顶部构建,因此您可以从子目录中运行 m
。如果您设置了 TOP
环境变量,m
命令会使用该变量。如果未设置 TOP
,m
命令会查找当前目录中的树,尝试找到树的顶层。
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。