android 源代码编译

android源代码研究是通向高级Android工程师的必由之路。下面选择两个版本的Android源码编译总结实践经验。

1、android源代码获取

android源代码获取工具:repo,基于git改装。

repo使用:安装repo工具(网上找方法),新建空工程目录,在此目录下repo init -u http://... (这个初始化命令仅对当前目录有效,其配置信息写在当前目录的".repo"目录下),repo sync,漫长等待。

android源代码下载:用国外的源是下不到的,一般要用清华或者中科大的源。

android源代码体积较大,一般建议Ubuntu的磁盘空间不小于100G。

android源代码时间比较长,建议取消Ubuntu自动休眠断网。方法是:System Settings --> Security & Privacy --> 勾销 "Waking from suspend" 和 "Returing from blank screen"。

android国内的源不稳定,可能时常断网。看见进度长时间不动就"Ctrl+C",再 repo sync。repo是有缓存的,会在上次中断的地方继续下,所以不要删除repo当前执行目录下的缓存文件".repo"。

2、编译

android2.3要求的JDK版本是oracle jdk1.6,android-6.0.1_r30要求的JDK是Open jdk1.7。实践证明,android2.3和android6.0的编译环境除了jdk要求不同外,其他所有配置都相同,鉴于2.3的资料较多,建议先配好环境编译通过2.3,然后改jdk编译android6.0。

在源代码根目录下执行"make"即可编译,如果需要发布开发者SDK,则在make命令成功执行之后执行"make sdk"

make过程中会遇到很多问题,这些问题都可以百度找到答案。值得注意的是,这些问题主要是编译工具造成的,源代码下载下来的内容是不需要改的。试图通过修改源代码下载内容来使编译通过的做法是方向性错误。

3、启动模拟器

假设工程目录(下载目录)是ANDROID_SOURCE

android2.3:

export ANDROID_PRODUCT_OUT=$ANDROID_SOURCE/out/target/product/generic/

cd $ANDROID_SOURCE/host/linux-x86/bin
./emulator &

android6.0:

export ANDROID_BUILD_TOP=$ANDROID_SOURCE/
export ANDROID_PRODUCT_OUT=$ANDROID_SOURCE/out/target/product/generic/

cd $ANDROID_SOURCE/prebuilts/android-emulator/linux-x86_64
./emulator &

4、编译android内核

android源码并不提供linux内核源码,随源码下载下来的是编译好的内核镜像。如果需要干预内核的话,需要自己编译内核源码,得到定制内核。

git下载内核源码 --> 修改Makefile文件 --> 执行编译

模拟器运行指定内核的android系统(2.3系统为例):

假设内核目录(下载目录)是KERNEL_SOURCE

cd $ANDROID_SOURCE/host/linux-x86/bin

./emulator -kernel $KERNEL_SOURCE/arch/arm/boot/zImage &

5、清理编译缓存

不彻底:make clear

彻底:make clobber(这会完全清理源代码到下载完成的状态)

代码交流 2021