编译ANDROID系统的基本顺序如下,
初始化
使用envsetup.sh脚本来初始化环境。
$ source build/envsetup.sh
或者
$ . build/envsetup.sh
选择编译目标
使用lunch命令来选择编译目标。确切的配置可以作为参数传进去,如:
$ lunch full-eng
上面的例子是一个针对emulator的完整的编译,包括所有的调试信息都是使能的。
如果不带参数运行lunch,将会提示选择编译目标。
所有的编译目标使用BUILD-BUILDTYPE的格式来指定,其中BUILD指向一个特定的功能组合,如下所示:
Build Name | Device | Notes |
---|---|---|
generic | emulator | 一般普通的配置 |
full | emulator | 完整配置,包括所有的语言、应用和输入法 |
full_crespo | crespo | 完整配置,运行在Nexus S("Crespo") |
BUILDTYPE是下列之一:
Buildtype | Use |
---|---|
user | 有限制的访问,适合于产品 |
userdebug | 和user相似,但是有root访问和调试能力,适合于调试 |
eng | 开发配置,包含额外的调试工具 |
关于更多为在实际设备上运行编译的信息,请参考http://source.android.com/source/building-devices.html
编译代码
使用make来编译代码。GNU make能够使用-jN参数来指定并发任务数,通常来说N的取值是计算机上准备用来进行编译的硬件核心的1到2倍。例如,在双E5520的机器上(2个CPU,每个CPU有4个core,每个core有2个thread),最快速的编译可以指定为make -j16或者make -j32。
$ make -j4
(snowolf_538:我在四核的机器上面指定make -j8,确实很快,4个核心都跑到100%)
运行
你可以在emulator上运行或者把它烧进实际的设备中运行。请注意你已经通过lunch选择了编译的目标,最好不要在一个不同的平台上运行。
烧进设备
我们使用fastboot来烧进设备。首先把设备置于fastboot模式,这可以通过按住特定的按键组合来实现,也可以通过以下shell命令。
$ adb reboot bootloader
一旦设备处于fastboot模式,运行
$ fastboot flashall -w
-w选项将擦除设备上的/data分区,这在第一次烧进设备的时候有用,但以后就不需要了。
关于更多为在实际设备上运行编译的信息,请参考http://source.android.com/source/building-devices.html
模拟ANDROID设备
emulator将会在编译过程中自动添加到你的PATH路径里,运行
$ emulator