离线下载
PDF版 ePub版

极客学院团队出品 · 更新于 2018-11-28 11:00:43

构建系统

下面的信息对于构建 Android 资源树的指导适用于各个分支,包括 master 分支。

选择一个分支

有些构建工程的环境所需要的请求,是需要搞清楚你计划要编译这些代码所使用的版本的。请查看 Codenames,Tags,and Build Numbers 里面完整的分支列表以供你来选择。你也可以选择下载,构建最新版本源代码(被称之为 master),这样你需要做的仅仅是在初始化仓库时,删除之前的分支即可。

当已经选择一个分支后,就跟着下面的指导去创建你的构建环境。

基础的构建命令系列如下所示:

初始化

envsetup.sh 脚本来初始化环境。值得注意的是,用 . (一个单独的点)来替换 source 节省一些符号,简写也更方便的在说明文档中使用。

$ source build/envsetup.sh

或者是

$ . build/envsetup.sh

选择一个目标

选择一个目标用 lunch 来建立。明确的配置信息可以通过一个参数来实现。比如像下面的命令:

$ lunch aosp_arm-eng

这个命令是构建一个模拟器,并且可以使用 debug 模式。

如果使用没有参数的 lunch 将会及时的提醒你从菜单中选择一个目标参数。

所有构建目标可以从 BUILD-BUILDTYPEBUILD 是一个代码名称,依赖于特定参数的混合体。这里是一部分的列表:

Build name Device Notes
aosp_arm ARM emulator AOSP,fully configured with all languages,apps,inputs methods
aosp_maguro maguro AOSP, running on Galaxy Nexus GSM/HSPA+ ("maguro")
aosp_panda panda AOSP, running on PandaBoard ("panda")

下列显示的是其中一个的 BUILDTYPE:

Buildtype Use
user limited access; suited for production
userdebug like "user" but with root access and debuggability; preferred for debugging
eng development configuration with additional debugging tools

要想查看更多有关构建以及运行在真机的信息,请看 Building for Devices

构建代码

make 可以完成任何事情。GUN 可以用一个 -jn 参数,传递一个平行的任务,一般来说使用一个介于 1 和 2 之间的参数 N,乘以在电脑上用于构建硬件线程的数量。比如,在一个 dual-E5520(2 个 cpu,每个 4 核 ,每核 2 个线程)上,最快的构建是使用命令 make -j16make -j32

$ make -j4

运行它!

你既可以运行你 build 在模拟器上,也可以在真机上。请注意你已经用 lunch 选中了你需要构建的目标,而且他不大可能运行在与构建目标不相符的地方。

在设备上运行

为了在设备上运行,你需要使用 fastboot ,这个命令需要你在成功构建之后,添加到你的 PATH 中。将设备置于 fastboot 模式,你既可以手工的在根目录下添加 key,也可以用下面的脚本命令:

$ adb reboot bootloader

一旦设备在 fastboot 模式下,运行

$ fastboot flashall -w

-w 选项用于清除在设备上 /data 分区;这个选项很适合第一次刷入真机,但在某些情况下并非必要。

要想查看更多有关构建以及运行在真机的信息,请看 Building for Devices

Android 模拟设备

模拟器将会自动被构建进程添加在你的路径中。要启动模拟器,请输入:

$ emulator

使用 ccache

ccache 是一种编译缓存,为的是让 C 和 C++ 更快的构建的。在资源树的根目录下,按照下面的说明去做:

$ export USE_CCACHE=1
$ export CCACHE_DIR=/<path_of_your_choice>/.ccache
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G

建议的缓存大小是 50-100 G。

在 Linux 上,你可以通过以下的操作查看 ccache :

$ watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

在 Mac OS 上,你应该用 darwin-x86 来替换掉 linux-x86。

当使用 Ice Cream Sandwich (4.0.x) 或者是这之前的版本时,你应该用 prebuilt 来替换掉 prebuilts/misc。

分析解决常见构建错误

错误的 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/download.html
************************************************************

出现这一现象可能的原因是:

  • 安装在初始化构建环境中所说的 JDK 失败。
  • 另一个之前版本的 JDK 出现在你的路径中。将正确的 JDK 放在你的 PATH 的开头处,或者从环境变量中删除导致问题的 JDK。

Python 版本 3

Repo 的基于特殊功能的 Python 2.x,但是不幸的是和 Python 3 相冲突。为了使用 Repo,请安装 Python 2.x:

$ apt-get install python

忽略文件系统的情况

如果你正在 Mac OS 上构建一个 HFS 文件系统,你可能会偶然遇见下面的错误:

************************************************************
You are building on a case-insensitive filesystem.
Please move your source tree to a case-sensitive filesystem.
************************************************************

请根据初始化构建环境中的说明创建一个敏感的磁盘镜像。

没有 USB 权限

在大多数 Linux 系统上,没有特权的用户不能通过默认的 USB 端口。如果你看见一个权限拒绝错误,请根据初始化构建环境来配置你的 USB 入口。

如果 adb 已经运行,并且通过刚才的规则也不能连接到设备,这时可以通过 adb kill-server 命令杀死。这将会导致 adb 使用新的配置重启。

上一篇: 下载源码 下一篇: 根据设备构建