OS X 10.11下载和编译Android6.0源码

之前也在公司的服务器上(Ubuntu系统)下载和编译过原生的Android源码,考虑到不可能一直连接到公司内网的服务器,平常也可能会折腾一下,而且在source.android.com上Setting up a Mac OS build environment的章节中,发现master版本的编译环境依赖都使用了”or newer”的字眼。想必对OS X系统的软件依赖要求也没那么高了,所以还是决定在本机下载一份Android的源码,并尝试编译。

下载Android源码

Step1 创建磁盘文件
打开Terminal,输入如下命令:

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg

Step2 下载源码
这步本没什么可说,直接按照官方教程https://source.android.com/source/downloading.html下载源码即可。但是由于我们特殊的网络环境,从官方下载源码可能不太顺利,即使使用VPN也不一定稳定。强烈建议使用中国科技大学清华大学的AOSP镜像。
另外如果你是第一次下载Android,强烈建议使用清华大学的每月更新的初始化包,这样100M光纤,使用迅雷平均9~10M的速度,不到两小时即可下载完成,比直接repo sync要节省不少时间。

wget http://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
repo sync # 正常同步

具体介绍请参考:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/#section-1
我在下载aosp-latest.tar解压后repo sync结果一直报错,看结果是/platform/external/dtc/ not found这时修改 .repo/manifests.git/config将url修改为谷歌的地址https://android.googlesource.com/platform/manifest然后再打开VPN同步一下即可。
repo_sync_success

编译源码

设置编译环境
参考官方设置OS X编译环境:https://source.android.com/source/initializing.html#setting-up-a-mac-os-x-build-environment

根据官方文档在安装了MacPorts之后,使用MacPorts安装依赖工具时,可能会遇到Port gmake not found的错误,在安装之前需要先执行下面的命令。

sudo port -d sync

然后就可以安装相关的工具了。

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

本机的系统环境如下:

  • OS X El Capitan 10.11.3
  • JDK 1.8.0_73
  • Xcode 7.2.1

然后

source build/envsetup.sh
lunch # 选择要build的target
make -j4

lunch aosp_arm-eng

如果你人品好的话,可能直接一遍就编译通过了。我在编译的时候遇到了一个”Building with Jack …… Out of memory error”的问题。
Jack Out of memory error
首先了解到Jack (Java Android Compiler Kit)是新的Android 编译工具,从Android 6.0 开始加入,开始替换原有的编译工具,例如javac, ProGuard, jarjar和 dx。它主要负责将java代码编译成dex包,并支持代码压缩,混淆等。
具体在官网也有介绍:https://source.android.com/source/jack.html
而且官网也提到了Jack “Out of memory error”的问题,并给出了建议的解决方案
即将$HOME/.jack 文件中SERVER_NB_COMPILE 设置为较小的值。可是在我的HOME目录下没有.jack这个文件,只有.jack-settings,于是我在.jack-settings中添加了SERVER_NB_COMPILE=1,再次make的时候依然遇到了”Out of memory error”。
再次查看编译的log,发现其实已经给出了提示,”Try increasing heap size with java option ‘-Xmx‘.”
所以在make之前设置一下jvm如下:

export JVM_ARGS="-Xmx4096m -XX:MaxPermSize=1024m"

然后再次make -j4,大概经过2个小时的样子,编译完成,虽然带着一堆的warning。
make_successfully
查看out目录下已经多出了很多文件,接下来就是烧录了。

make_successfully