AOSP版本选择很重要,若是选错了,会形成编译失败等各类问题,编译AOSP对Xcode的版本是有要求的;html
好比:AOSP6.0-7.0,要求Xcode的版本是8.3,然而在MacOS 10.14上面是不支持Xcode8.3的这就很尴尬; 因为如今你们的Mac环境基本是更新到最新的10.14了,因此这里推荐你们选择android-8.1.0_r1。
编译环境:java
因为Mac OS的文件系统默认是不区分大小写的,Git 并不支持此类文件系统,并且此类文件系统会致使某些 Git 命令(例如 git status)的行为出现异常,因此咱们须要在区分大小写的文件系统中对 AOSP 源文件进行操做。android
经过 shell 使用如下命令建立磁盘映像:git
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 150g ~/android.dmg
这里设置分配150g的大小,这将建立一个 .dmg(也多是 .dmg.sparseimage)文件,该文件在装载后可用做具备 Android 开发所需格式的存储卷。github
若是您之后须要更大的存储卷,还可使用如下命令来调整稀疏映像的大小:shell
# hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
双击生成的.dmg.sparseimage文件,就会看到挂载的磁盘了,以后全部操做都在这个磁盘分区中进行,您能够像对待外接硬盘同样将其弹出(卸载)。api
若是你喜欢在命令行中挂载/卸载分区,能够向 ~/.bash_profile 中添加辅助函数:xcode
# mount the android file image function mountAndroid { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android; } # unmount the android file image function umountAndroid() { hdiutil detach /Volumes/android; }
注意文件名路径是否一致,要使.bash_profile配置生效,须要:bash
# source ~/.bash_profile
以后你就能够在命令行中经过mountAndroid和unmountAndroid来操做了。网络
通常在安装Xcode的时候会自动安装命令行工具,这里保险起见,检查一下:
# xcode-select --install
将如下内容添加到~/.bash_profile中
export PATH=/opt/local/bin:$PATH
经过 MacPorts 获取 Make、Git 和 GPG 程序包:
# POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
若是您使用 Mac OS X v10.4,还须要安装 bison:
# POSIXLY_CORRECT=1 sudo port install bison
在 Mac OS 中,可同时打开的文件描述符的默认数量上限过低,在高度并行的编译流程中,可能会超出此上限。
要提升此上限,请将下列行添加到 ~/.bash_profile 中:
# set the number of open files to be 1024 ulimit -S -n 1024
Repo 是一款工具,可以让您在 Android 环境中更轻松地使用 Git.
直接运行下面的命令:
# curl https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
会在主目录下生成repo文件,接着给他赋予可执行的权限:
# chmod a+x ~/repo
为了能够方面的使用repo命令,咱们把它移动到/opt/local/bin里面,由于这个路径咱们在上一步中已经加入到PATH了,因此咱们能够在任何一个地方执行repo命令;
# mv ~/repo /opt/local/bin
进入第一步中建立好的分区,创建工做目录:
# mkdir aosp # cd aosp
repo的运行过程当中会尝试访问官方的git源更新本身,若是想使用tuna的镜像源进行更新,能够将以下内容复制到你的~/.bash_profile里:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
设置Git用户名和邮箱:
# git config --global user.name "Your Name" # git config --global user.email "you@example.com"
初始化repo,这里采用清华大学的镜像,并设置分支android-8.1.0_r15:
#repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r15
最后一步:
# repo sync
源码同步过程当中经常会由于网络因素而断开,若是断开了继续执行repo sync命令便可,直到下载完成。
漫长的等待......
下载完成后差很少占用70G大小,由于咱们后续不须要再进行分支切换与同步,因此咱们能够把目录下的.repo文件夹给删除了,毕竟Mac的SSD容量宝贵,删除以后你会发现硬盘大小没有释放,这就有点尴尬了,这个问题目前也没找到解决的办法,个人方法是按照第一步建立一个新的分区,把内容拷贝进去,而后把旧的分区删了,这样空间就释放了。
要使用 ccache,请在源代码树的根目录下执行如下命令:
#export USE_CCACHE=1 #export CCACHE_DIR=/<path_of_your_choice>/.ccache #prebuilts/misc/darwin-x86/ccache/ccache -M 50G
注意<path_of_your_choice>是你源码下载的根目录。
最后请将如下内容添加到 .bash_profile(或等同文件)中:
export USE_CCACHE=1
在~/.bash_profile中添加如下内容,前提必须是安装了JDK1.8:
export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
执行如下命令,打开配置文件:
# vi build/soong/cc/config/x86_darwin_host.go
查看darwinSupportedSdkVersions,这里列出了支持的sdk版本:
darwinSupportedSdkVersions = []string{ "10.10", "10.11", "10.12", }
接着咱们进入如下目录查看现有的XcodeSDK版本:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
这里咱们选择10.11的版本,若是没有MacOSX10.11.sdk则去MacOSX-SDKs 中下载一个,解压到该目录,并把其余版本的删除,确保只保留一个就好了。
首先要把shell切换到bash(若是你使用的是zsh)
#chsh -s /bin/bash
初始化环境:
#source build/envsetup.sh
选择编译的分支:
#lunch
会出现如下列表:
Lunch menu... pick a combo: 1. aosp_arm-eng 2. aosp_arm64-eng 3. aosp_mips-eng 4. aosp_mips64-eng 5. aosp_x86-eng 6. aosp_x86_64-eng 7. aosp_car_arm-userdebug 8. aosp_car_arm64-userdebug 9. aosp_car_x86-userdebug 10. aosp_car_x86_64-userdebug ... ...
Which would you like? [aosp_arm-eng]
要求输入对应的数字:
若是你想在你的Nexus上设备运行,请参照官方设备对应列表选择;
若是你只想在本机的虚拟机上运行,Mac系统的话选择aosp_x86-eng便可。
最后一步,编译:
#make -j6
经过-jN参数来设置编译的并行任务数,以提升编译速度,在此前个人CPU核心数为6,这里N值最好选在6到12之间,这里咱们设置6个并行任务进行编译。
这里须要注意的是,每次退出再进入命令行要执行以上命令以前,都要先执行:
#source build/envsetup.sh
缘由:JACK编译器不支持多用户同时编译,其余用户在编译,端口被占用。
解决方法:
以下:修改如下两个配置文件中的端口号server.service.port和server.admin.port,好比都改成8096/8097:
注意:
两个文件中的端口号必须一致。
修改后的端口号必须是没有被使用的。
缘由: 出现这个错误是因为电脑内存不足;
解决方法:在命令行分别执行如下三条语句,而后继续编译;
# export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" # ./prebuilts/sdk/tools/jack-admin kill-server # ./prebuilts/sdk/tools/jack-admin start-server
在log中出现BSION等字样;
缘由:网上说这个bsion的一个bug;
解决方法:拉取新的分支,从新编译 bison:
#cd external/bison #git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
若是这步骤发生错误了(好比以前删除了.repo文件夹)
这时候咱们就把bison这个文件夹删除,下载一个新的:
wget https://android.googlesource.com/platform/external/bison/+archive/c0c852bd6fe462b148475476d9124fd740eba160.tar.gz
解压后进入bison文件夹,执行:
# mm # cp out/host/darwin-x86/bin/bison prebuilts/misc/darwin-x86/bison/
最后一切顺利的话,通过漫长的编译后,最终会出现如下画面则说明编译Android系统成功了。