一、搭建编译环境
参考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、安装所需的程序包
- 安装JDK:不同的Android版本对JDK要求不同,可以参考:https://source.android.com/source/requirements.html
-
安装Xcode 命令行工具:可以使用以下命令
$ xcode-select --install
-
安装 MacPorts:https://www.macports.org/install.php 如果安装过程出现卡死,尝试一下断网安装
-
通过 MacPorts 获取 Make、Git 和 GPG 程序包:
$ 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
- 在主目录下创建bin目录并加入到环境变量中
$ mkdir ~/bin PATH=~/bin:$PATH
- 下载repo,并赋予权限
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
- 建立源码目录
$ cd /Volumes/android
$ mkdir aosp
- 切换到源码目录,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
- 同步代码(下载)
$ repo sync
这个过程会比较久,我第一次同步同步了一个多小时
三、编译源码
参考:https://source.android.com/setup/building
一开始我用的zsh的终端,中间会卡住,建议在编译过程使用bash终端
- 清理make缓存
$ make clobber
- 初始化环境
$ source build/envsetup.sh
- 选择build目标
$ lunch aosp_arm-eng
- 编译代码
$ 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
查看当前电脑有的版本
修改编译配置
$ cd /Volumes/android-source/aosp/build/soong/cc/config/
$ vim x86_darwin_host.go
找到darwinSupportedSdkVersions节点,添加自己的sdk版本,如下:
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/