接下来的说明来构建Android源代码tree适用于所有分支,包括master。基本的构建命令序列如下:
Note: 如果你正在构建Android 6.0或更高版本,请参阅使用Jack编译小节来了解新的默认工具链信息。
获取专有二进制文件
仅从纯源代码角度AOSP不能直接使用,它还需使用额外的硬件相关的专业库才能运行,例如硬件图形加速。参见下面下载链接小节和额外的资源设备二进制文件 。
Note:如果你编译的源代码打算运行在真机上,这步是必须的,否则刷机时手机就变砖啦~,如果是运行在模拟器中该步可以跳过。
下载专有二进制文件
你可以从Google’s Nexus driver page中为运行已标记AOSP发布分支的支持设备下载官方二进制文件。这些二进制文件增加了访问使用非开源代码的额外硬件的能力。为了代替构建AOSP master分支,也可以使用Binaries Preview for Nexus Devices 。当为一个设备构建master分支的时候,使用最近标号的发布或最新日期的二进制文件。
提取专有二进制文件
每一组二进制文件都是一个压缩文件,里面是一个自解压脚本。把下载好的二进制文件拷贝到源代码根目录,运行里面包含的自解压脚本解压每个档案,然后确认你同意闭源许可协议条款。二进制文件和其匹配的makefiles文件将被初始化在源代码树的vendor/hierarchy文件夹中。
清理
为了确认提取后新初始化的二进制文件被正确的放到账户中,需要删除任何正在使用的预构建的输出文件:
$ make clobber
设置环境
使用envsetup.sh脚本来初始化环境。注意这将用.(单独一个点)代替source,从而节省了一些字符,在文档中短格式更常用。
$ source build/envsetup.sh
Or
$ . build/envsetup.sh
选择编译目标
使用lunch命令来选择构建目标。精确的配置可以作为参数传递。流入下面命令:
$ lunch aosp_arm-eng
这个命令指的是为模拟器创建一个完整的构建,开启了所有的调试。
如果运行不带任何参数的lunch命令将提示你从菜单中选择一个目标。
所有的构建目标都来自BUILD-BUILDTYPE,这里的BUILD是一个代号,指定了特定功能的组合。
BUILDTYPE是下面中的一个:
Buildtype | Use |
user | 限制访问;适用于产品 |
userdebug | like “user” but with root access and debuggability; preferred for debugging |
eng | 带有额外调试工具的开发配置 |
更多的关于构建和实际硬件上运行的信息,详见运行构建.
例如,编译运行在Nexus 5真机下的Android 4.4.2系统源代码,可以选择:
构建代码
这节只是一个总结,以确保安装完成。查看运行构建来了解关于构建Android更详细的信息。
使用make来构建一切。GUN make可以使用一个-JN参数来处理并行任务,这通常多核多线程的构建,例如,在一个dual-E5520机器上(2个CPU,每个CPU 4核,每核2个线程),最快的构建是使用 make –j16 到 make –j32 之间的命令。
$ make -j4
运行
你也可以把你的构建运行在一个模拟器也可以flash到一个设备上。请注意你已经使用lunch选择了你的构建目标,因此不大可能把你的构建运行在其他目标上。
Note: 记得获取专有二进制文件否则你的构建是必能在你的目标硬件上运行启动的。如果你这个时候获取二进制blob,你需要解压他们,使用make clobber 重新构建。
使用fastboot刷机
为了flash到一个设备,你需要使用fastboot,当你构建成功后,这个会包含在你的目录下。参见 运行构建—flash到一个设备小结了解更多的信息。
在模拟器上运行
如果,通过构建进程,模拟器已经被自动添加到你的目录中,为了运行模拟器:
$ emulator