在Mac 10.11编译最新的Android 6.0

背景

因为只有一台可怜的256G MBPR,并没有足够的空间去装一个Ubuntu,所以之前在10.10的时候尝试编译5.0未果后(各种版本问题),就无奈放弃了。
前几天在看最新的aosp官网介绍的时候,发现master和6.0.x的编译都使用了or later来描述对Mac OS的版本要求,就抱着试一试的心情开始了新的编译之旅。从下载到最后动车轰轰声中编译结束,也断断续续花了3天时间。

配置

OS X EL Capital 10.11.1
Java 1.7.0_79
Xcode 7.1.1 with command line tool
Zsh

过程

因为是给我的Nexus6编译image,所以分支上,我选择了6.0.0_r2进行编译,分支选择可以参照Source code tags and builds.

对于aosp被墙,尽管我们也能用vpn连接去下,但是其实国内是有aosp镜像的:科大镜像
速度挺快,同步过程也比较稳定。

1
2
3
4
5
6
7
8
9
10
# 实测build完后,需要60多个G,所以其实分配70G也绰绰有余了
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 70g ~/android.dmg
hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android;

cd /Volumes/android
mkdir 6.0.0_r2
cd 6.0.0_r2

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-6.0.0_r2
repo sync

然后是漫长的等待,内容会先下载到.repo里面,再解压出来,最后大致是37G左右。接着就可以开始我们的编译之旅了。

1
2
3
4
5
6
source build/envsetup.sh
lunch
# 选择要build的target, 可参考 https://source.android.com/source/running.html#picking-and-building-the-configuration-that-matches-a-device, N6是shamu,即19
19 (aosp_shamu-userdebug)
# 我是16G的i5 mbpr, 所以选了4,这里可以看机器性能指定不同的线程数
make -j4

你会发现报错了!!没错。。就是报错了

1
2
3
Install: out/target/product/hammerhead/root/res/images/charger/battery_scale.png
Install: out/target/product/hammerhead/fake_packages/charger_res_images-timestamp
make: *** No rule to make target `device/lge/hammerhead_fp-kernel/zImage-dtb', needed by `out/target/product/hammerhead/kernel'. Stop.

分析了一下。。发现是kernel的问题,但是官网压根没提到这个。好吧,我们来到Binaries for Nexus Devices, 选择自己机器和分支对应的driver, 我这里对应的是Nexus 6 (Mobile) binaries for Android 6.0.0 (MRA58N),3个都下载解压到目录后,分别运行三个extract开头的sh脚本,再次make,就顺利地build成功了。

最后,刷刷刷

1
fastboot -w flashall

坚持原创技术分享,您的支持将鼓励我继续创作!