2.1.3 源代码的编译

经过一段时间的等待,同步源代码的工作就可以完成了。至此,万事俱备,只欠东风。即便不需要使用编译出来的ROM或者工具,通过编译源代码建立完整的类关联,对于顺畅地阅读源代码,也还是很有帮助的。

如果仅是为了阅读或修改,可以采用默认配置进行编译:


$cd MY_ANDROID

$make


如果在编译过程中惊讶地发现有错误run-java-tool抛出,那么你可能需要添加环境变量$ANDROID_JAVA_HOME,指向另一个环境变量$JAVA_HOME:


$export ANDROID_JAVA_HOME=$JAVA_HOME


Android是通过Makefile来组织整个项目的编译结构的。由于它采用了一些新的make特征,需要3.80以上版本的make应用帮助。

为了使得Android能够在不同的设备环境下运行,你需要在编译时依照环境进行配置,选择符合需求的功能模块。在项目编译结构上,Android增加了层(layer)的概念。与其说是分层,不如说是树状结构,因为层次之间是一种一对多的结构关系[1]

如表2-1所示,同一款芯片架构上可以配置多个品牌,而同一个品牌可以有多款设备。依此类推,一款特定的产品,一定会有它所依赖的设备、品牌、芯片信息。

2.1.3 源代码的编译 - 图1

编译指定的产品,示例如下:


$cd$MY_ANDROID

$.build/envsetup.sh

$make-j4 THE_PRODUCT-generic-user


最后一条make指令中的THE_PRODUCT参数,指定你期望编译的具体产品名称,编译系统会根据该产品的配置信息,编译适合它的设备、品牌、芯片信息的功能模块。

除了产品信息,Android项目在编译的时候还可以指定如user这样的编译变量(Build Variants)。和产品层次信息不一样,这些参数指明了这次编译的目的是调试还是最终发布,等等[2]

[1]参考自:http://source.android.com/porting/build_system.html。

[2]详细的编译变量信息,可以参见:http://source.android.com/porting/build_system.html。