原文路径:http://source.android.com/source/building.html
翻译全文:
构建文件系统
构建系统的基本步骤如下:
初始化
通过envsetup.sh脚本来初始化系统环境。值得注意的是,在命令中使用 . 来代替source不仅可以少敲一些字符,而且在文档中这种简短的方式用的更多一些。
$ source build/envsetup.sh
或者
$ . build/envsetup.sh
选择一个平台
通过 lunch 选择要编译的目标,具体的配置可以放到命令行参数当中。
$ lunch full-eng
上面的例子演示的是编译一个完整模拟器的命令,在这个过程中打开了全部的调试选项。
如果运行 lunch 命令时不带任何参数,会弹出一个选择目标平台的菜单。
所有目标平台的名字都是依照“构建名称-构建类型”的格式,
构建名称如下:
构建名称 | 设备 | 注释 |
full | emulator | 选中所有语言、应用程序和输入法 |
full_maguro | maguro | 运行在Galaxy Nexus GSM/HSPA+ ("maguro")平台上的完整版本 |
full_panda | panda | 运行在PandaBoard ("panda")的完整版本 |
构建类型如下:
构件类型 | 使用方法 |
user | 访问受限,适合于生产版本。limited access; suited for production |
userdebug | 与“user”类型类似,但是拥有root权限和调试权限,适合于调试版本。like "user" but with root access and debuggability; preferred for debugging |
eng | 开发过程用的配置设置,包含一些额外的调试工具。development configuration with additional debugging tools |
关于实际平台的构建和在实际平台上运行的更多的信息,可以参考针对设备的系统构建。
编译代码
Make可以编译所有工程。GNU make 通过一个 -jN 参数,可以并行地处理多个任务。通用的做法是,使用N个任务,N介于用于编译的计算机的硬件线程数的1倍和2倍之间。例如,在一个双核的E5520机器(2个CPU,每个CPU为4核,一个核心可以执行2个线程),最快的编译方法是使用介于make -j16和make -j32之间的任务数进行编译。
$ make -j4
启动运行
你可以在模拟器上运行,也可以把系统刷到设备上。切记,在lunch的时候,你已经选好了编译目标,最好不要在同一个平台上运行不同的系统。
刷设备
刷设备时需要使用fastboot命令,该命令在系统编译完成后自动加入到系统路径中。首先让设备处于fastboot 模式,可以通过启动过程中手动按一些组合键或者通过以下shell 命令
$ adb reboot bootloader
一旦设备处于了fastboot模式,接着运行
$ fastboot flashall -w
-w选项用于清除设备上的/data分区,第一次刷某个特定设备时非常有用,其他时间不需要使用。
关于实际平台的构建和在实际平台上运行的更多的信息,可以参考针对设备的系统构建。
模拟一个Android设备
在构建过程中,模拟器命令已经被自动加入到了系统路径中。启动模拟器,输入
$ emulator
使用ccache
Ccache是C和C++的编译缓存,它可以让编译速度更快。在代码树的根目录下,执行以下操作命令:
$ export USE_CCACHE=1
$ export CCACHE_DIR=/<path_of_your_choice>/.ccache
$ prebuilt/linux-x86/ccache/ccache -M 20G
查看已用的ccache,可以通过以下命令:
$ watch -n1 -d prebuilt/linux-x86/ccache/ccache -s
在OSX,使用darwin-x86来代替linux-x86。
一般编译错误的疑难解答
Java版本错误
如果使用java 1.6编译froyo 和更早的版本,或者使用java1.5编译gingerbread 和之后的版本,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。根据要编译的Android系统的版本的不同,需要JDK5或者6版本。
以前安装的JDK版本依旧在PATH变量中,可以通过以下命令移除冲突的版本
$ export PATH=${PATH/\/path\/to\/jdk\/dir:/}
Python版本3
Repo是根据Python 2.x版本上的一些特殊功能编译出来的,不幸的是,它并不与Python 3兼容。要使用repo,需要先安装Python 2.x。
$ apt-get install python
不区分大小写的文件系统
如果你在Mac OS X操作系统上使用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服务进程,这会让adb进程以新的配置重新启动。