前边写过aosp在Linux上(Ubuntu)的编译文章,因为是在虚拟机里边,所以在方便的同时,效率也会有所折扣(调试编译运行速度等)。所以在Mac上试验了一次,发现方便很多。特此记录下来。
大体流程还是与Android源代码编译笔记(支持5.x及以上版本) - Linux篇一致的,细节地方有所不同。
安装软件包
JDK
这部分的要求对于各个平台是一致的,具体参见安装JDK
Command Line Tools
$ xcode-select --install
MacPorts
MacPorts是Mac平台的一个安装包管理器。可以直接从其官网上下载与你的Mac系统对应的安装包。
Note: Make sure that
/opt/local/bin
appears in your path before/usr/bin
. If not, please add the following to your~/.bash_profile
file:
$ export PATH=/opt/local/bin:$PATH
make, git, and GPG
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
If using Mac OS X v10.4, also install bison:
$ POSIXLY_CORRECT=1 sudo port install bison
创建大小写敏感的磁盘文件
Mac默认情况下,虽然运行时是大小写保护的,但是文件系统本身确实大小写不敏感的(你可以创建一个同名但大小写不一样的文件或者文件夹试试)。
为了避免git
在执行中出现异常情况,所以需要另外创建一个大小写敏感的磁盘文件。我们之后的源代码和编译都在那里边进行。
我们使用sparse类型的文件,它的优点在于后期可以根据需要调整大小。
命令如下:
$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 120g ~/android.dmg
下载好源码编译完之后只剩下2g了,所以你可以考虑设置一个大一点的值。
This will create a.dmg
(or possibly a.dmg.sparseimage
) file which, once mounted, acts as a drive with the required formatting for Android development.
如果你想调整磁盘文件大小,使用如下命令:
$ hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
Helper方法
磁盘文件创建出来之后,需要加载才可以使用。为了以后加载/卸载方便,我们可以在~/.bash_profile
文件中加入以下方法:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
然后你就可以执行mountAndroid
进行加载,umoundAndroid
进行卸载了。非常方便。
注意将
attatch
后边的磁盘文件替换为你自己的文件名。
可选配置
设置文件描述符上限
Google是这么说的
On Mac OS, the default limit on the number of simultaneous file descriptors open is too low and a highly parallel build process may exceed this limit.
To increase the cap, add the following lines to your
~/.bash_profile
:
# set the number of open files to be 1024
ulimit -S -n 1024
但是在实际当中,我并没有配置这一项,也是编译成功的。
缓存设置
具体参见设置ccache缓存 - 可选
在Mac平台下,需要执行Mac平台下的ccache
命令,具体如下
$ prebuilts/misc/darwin-x86/ccache/ccache -M 50G
代码下载与编译
参考Android源代码编译笔记(支持5.x及以上版本) - Linux篇。
这部分内容是一模一样的。我编译了master分支,耗时约1.75小时。