通过上篇文章《Android系统6.0源代码编译过程分析(1)》分析下载Android6.0系统源码和编译源码的过程,编译源码成功后运行模拟器,如图所示:

经过漫漫长路,终于把下载源码和编译源码搞定了,接下来,继续分析编译SDK和内核。
1 编译SDK
注意:编译SDK的时候会把之前编译好的out文件夹下的部分内容删除重新编译,读者可以在编译SDK之前最好备份out文件,其实不备份也没有关系,毕竟源码经过无数次的修改,才会达到读者的要求(除非是有的读者只看看源码里面的结构);不过从第二次开始重新 make -jN 编译的时候,会编译快的多。
进入Android源码目录文件夹下,先初始化编译环境:
source build/envsetup.sh
设置编译目标:
最后一步开始编译sdk:
make sdk
编译成功,如图所示:
在/out/host/linux-x86/sdk/sdk 目录下就可以看到编译好的SDK:
建议把编译好的SDK也备份一下,以防在以后修改源码的时候丢失或者损坏。
2 下载、编译 kernel
(1)下载kernel
在上篇文章《Android系统6.0源代码编译过程分析(1)》中,下载下来的Android源代码,是不包括linux kernel内核代码的,是使用的谷歌工程师们预先编译好的内核(在prebuilts/qemu-kernel文件中),它们是两个部分。下载下来是为了方便查看里面的内核结构。Android源码默认的内核如图所示:
可以看出Android6.0是用的3.4版本的内核,因此自己也要下载Android源码系统对应的内核版本。
下载kernel源码,初始化仓库:
如图所示:
会自动创建一个goldfish目录,进入goldfish目录:
cd goldfish
查看所有分支:
如图所示:
下载检出文件到本地:
如图所示:
现在kernel源码就下载到goldfish目录下了。
(2)编译内核源码
在下载好的Android系统源码目录中新建kernel文件夹,把goldfish复制到kernel文件夹下。
修改goldfish目录下makefile文件配置:
sudo gedit Makefile
定位大约第195行:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
更改为
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
进入goldfish目录,配置环境变量:
export PATH=$PATH:~/android-./prebuilts/gcc/linux-x86/arm/arm-eabi-/bin
编译:
make goldfish_armv7_defconfig
最后执行:
注意:(/media/wang/d1756fc5-46fe-4779-bee7-3912f0ce4e01/home/wang/)是笔者自己机械硬盘的路径名称,请读者换成自己的,或者用“~”代替
编译成功,如图所示:
返回Android系统源码目录,运行模拟器:
source build/envsetup.sh
lunch sdk-eng
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage & //从内核文件启动模拟器
查看刚编译过的内核版本信息,如图所示:
分析的此次,Android系统源码下载、源码编译、SDK编译、内核编译就结束了。接下来,就开始该读者分析源码、解读源码、修改源码了。