构建安卓

按照这些说明开始构建 Android。

设置环境

使用envsetup.sh脚本初始化环境:

source build/envsetup.sh

或者

. build/envsetup.sh

有关相关命令的说明,请参阅platform/build/envsetup.sh中的脚本,包括用于选择设备目标的lunch和用于构建非捆绑应用程序的tapas ,例如参考电视应用程序

您需要在每次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 build 的行为应该与 user build 相同,能够启用通常违反平台安全模型的额外调试。这使得 userdebug 构建有利于用户测试,具有更强的诊断能力。使用 userdebug 构建进行开发时,请遵循userdebug 指南

eng build 优先考虑在平台上工作的工程师的工程生产力。 eng 构建关闭了用于提供良好用户体验的各种优化。否则,eng 构建的行为类似于 user 和 userdebug 构建,以便设备开发人员可以看到代码在这些环境中的行为方式。

有关为实际硬件构建和运行的更多信息,请参阅闪存设备

小吃

tapas命令配置未捆绑应用程序的构建。它选择由 Android 构建系统构建的单个应用程序。与lunch不同, tapas不要求为设备构建图像。

运行tapas help以获取有关该命令的更多信息。

构建代码

本节是一个快速摘要,以确保设置已完成。

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

m

如上所述,您可以通过在m命令行中列出它们的名称来构建特定模块而不是完整的设备映像。此外, m还提供了一些用于特殊目的的伪目标。一些例子是:

  • droid - m droid是正常构建。这个目标在这里是因为默认目标需要一个名称。
  • all - m all构建m droid所做的一切,加上没有droid标签的一切。构建服务器运行它以确保构建树中的所有内容并具有Android.mk文件。
  • m - 从树的顶部运行构建。这很有用,因为您可以从子目录中运行make 。如果您设置了TOP环境变量,它将使用它。如果不这样做,它会从当前目录查找树,试图找到树的顶部。您可以通过不带参数运行m来构建整个源代码树,也可以通过指定它们的名称来构建特定目标。
  • mma - 构建当前目录中的所有模块及其依赖项。
  • mmma - 构建提供的目录中的所有模块及其依赖项。
  • croot - cd到树的顶部。
  • clean - m clean删除此配置的所有输出和中间文件。这与rm -rf out/相同。

运行m help查看m提供的其他伪目标。

运行构建

您可以在模拟器上运行您的构建,也可以在设备上闪存它。因为您已经使用lunch选择了构建目标,所以它不太可能在与构建目标不同的目标上运行。

使用 fastboot 刷机

要刷新设备,请使用fastboot ,它应该在成功构建后包含在您的路径中。有关说明,请参阅刷写设备

模拟 Android 设备

模拟器会在构建过程中自动添加到您的路径中。要运行模拟器,请键入:

emulator

了解构建指纹

要跟踪和报告与特定 Android 构建相关的问题,了解构建指纹非常重要。构建指纹是一个唯一的、人类可读的字符串,其中包含发布给每个构建的制造商信息。请参阅 Android 兼容性定义文档 (CDD)构建参数部分中的FINGERPRINT描述,了解准确的语法。

构建指纹代表特定的 Android 实现和修订。这个唯一的密钥允许应用程序开发人员和其他人报告特定固件版本的问题。有关 Android 问题报告流程,请参阅报告错误

构建指纹封装了所有 Android 实现细节:

  • API:Android 和本机,以及软 API 行为
  • 核心 API 和一些系统 UI 行为
  • CDD 中定义的兼容性和安全要求
  • 应用程序为满足预期要求的目标设备而采用的产品规格和使用功能设置
  • 硬件和软件组件的实现

有关完整的详细信息,请参阅CDD ,有关创建全新 Android 设备的说明,请参阅添加新设备。

排查常见构建错误

Java 版本错误

如果您尝试构建与您的 Java 版本不一致的 Android 版本,请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 使用新配置重新启动。