MAC 上编译Android 8.0源码

一、搭建编译环境

参考https://source.android.com/source/initializing.html#installing-the-mac-jdk

1、创建区分大小写的磁盘映像

在默认安装过程中,Mac OS 会在一个保留大小写但不区分大小写的文件系统中运行。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status)的行为出现异常。所以,我们需要单独创建一个区分大小写的磁盘
命令如下:

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

如果发现创建的磁盘空间不足需要扩容,可以使用以下命令

$ hdiutil resize -size <new-size-you-want>g ~/android.dmg

创建成功后,会在user目录下看到一个磁盘映像,双击就可以挂载了

2、安装所需的程序包
$ xcode-select --install
$ sudo port install gmake libsdl git gnupg

如果您使用 Mac OS X v10.4,还需要安装 bison:

$ sudo port install bison
3、设置文件描述符数量上限

在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。
要提高此上限,请将下列行添加到 ~/.bash_profile 中:

# set the number of open files to be 1024
ulimit -S -n 1024

二、下载源码

参考:https://source.android.com/source/downloading.html

  1. 在主目录下创建bin目录并加入到环境变量中
$ mkdir ~/bin PATH=~/bin:$PATH
  1. 下载repo,并赋予权限
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
  1. 建立源码目录
$ cd /Volumes/android
$ mkdir aosp
  1. 切换到源码目录,init repo
$ cd aosp
$ repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r13

我这里选择的是8.0版本的源码,需要其他版本的版本号可以查看https://source.android.com/source/build-numbers.html#source-code-tags-and-builds
如果下不下来或者速度慢,可以试试清华的镜像

$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r15
  1. 同步代码(下载)
$ repo sync

这个过程会比较久,我第一次同步同步了一个多小时

三、编译源码

参考:https://source.android.com/setup/building
一开始我用的zsh的终端,中间会卡住,建议在编译过程使用bash终端

  1. 清理make缓存
$ make clobber
  1. 初始化环境
$ source build/envsetup.sh
  1. 选择build目标
$ lunch aosp_arm-eng
  1. 编译代码
$ make -j4

然后就是漫长的等待了~如果不出意外,成功结束了,源码就算编译完啦,就可以使用ide查看了

四、编译过程常见问题和解决方法

internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"] ninja: build stopped: subcommand failed
解决方法1:

https://github.com/phracker/MacOSX-SDKs/releases下载10.10-10.12任意一个版本,解压到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs并创建对应的快捷方式:

例如下载的是10.12
解压:
xz -d MacOSX10.12.sdk.tar.xz tar -Jxvf MacOSX10.12.sdk.tar

如果解压完了不是.sdk格式的文件夹,就重命名
$ sudo ln -s MacOSX10.12 MacOSX10.12.sdk
解决方法2:
$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
$ ls

查看当前电脑有的版本

《MAC 上编译Android 8.0源码》

修改编译配置

$ cd /Volumes/android-source/aosp/build/soong/cc/config/  
$ vim x86_darwin_host.go

找到darwinSupportedSdkVersions节点,添加自己的sdk版本,如下:
《MAC 上编译Android 8.0源码》

ninja: build stopped: subcommand failed.

解决方法:切换bison版本

$ cd /Volumes/android-source/aosp/external/bison/
$ git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
$ mm

如果mm命令无法执行,需要回到aspo目录执行以下命令:

$ source build/envsetup.sh
$ lunch aosp_arm-eng
$ cd external/bison/
$ mm

替换bison文件

$ cp /Volumes/android-source/aosp/out/host/darwin-x86/bin/bison /Volumes/android-source/aosp/prebuilts/misc/darwin-x86/bison/