Build AOSP in mac osx 10.12.6
更新:
2022-03-01更新AOSP11.0的编译
2017-09-09更新AOSP8.0的编译
2016-05-01更新AOSP6.0编译
配置OSX系统
- 安装
Xcode
- 找到
Xcode
安装目录,右键打开show package content
- 创建
/Developer/SDK
目录 - 将
MacOSX10.11.sdk
从Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
复制到/Developer/SDK
- 将
Xcode.app
复制到到/Developer目录下
完成Xcode
的配置
- 打开
Xcode
- 从
Xcode
的菜单打开Preferences
- 选择
Location
标签 - 在
Command Line Tools
中选择Xcodd 7.2
(具体版本依个人电脑上的Xcode版本而定)
安装MacPorts
- 获取最新版的MacPorts!
- 打开控制台,编辑
bash
配置文件
1 | $ vim ~/.bash_profile |
- 在配置文件中插入
1 | $ export PATH=/opt/local/bin:$PATH |
- 重新载入配置信息
1 | $ . ~/.bash_profile |
- 运行
port
命令检测是否成功安装
1 | $ port |
- 安装需要的依赖包
1 | $ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg |
安装java
开发包(JDK1.7)
安装Repo
Repo
是基于git
的一种工具,能很方便的用来管理Android
源码。更多信息请查看
- 确保根目录下有
/bin
目录
1 | $ mkdir ~/bin |
- 下载
Repo
工具,确保它可以运行
1 | $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo |
设置文件描述符
OSX
系统的默认文件描述符的数量太小,高并行构建可能会超出这个限制。为了突破这个限制,添加以下命令到.bash_profile
中
1 | $ vim ~/.bash_profile |
创建字符大小写敏感的虚拟驱动
1 | $ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg |
源码很大,因此建议要创建大一点的虚拟光驱
挂载这个驱动:
1 | hdiutil attach ~/android.dmg -mountpoint /Volumes/android |
你也可以用另一种方式,在配置文件中加入如下方法:
1 | function mountAndroid { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android; } |
然后运行如下命令:
1 | mountAndroid |
下载源文件
首先我们确定我们要下载的是哪个版本的源码,本文以android-6.0.1_r30
为例
首先在/Volumes/android
创建一个工作目录
1 | $ cd /Volumes/android |
运行
1 | $ repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.0_r7.0.1 |
最后运行
1 | repo sync |
来下载源码
编译源码
在源码根目录运行
1 | $ source build/envsetup.sh |
运行
1 | $ lunch |
按回车选择aosp_arm-eng
。
安装openssl curl
1 | brew install curl --with-openssl |
运行
1 | caffeinate make -j4 |
caffeinate
阻止休眠
开始漫长的编译过程
运行
1 | make idegen && development/tools/idegen/idegen.sh |
生成可被IDE
识别的工程。
碰到的一些问题
- 下载源码时,需要比较长的时间,还好支持断点续传。(被盾的地方,必须使用VPN)
- 源码下载完之后,编译会碰到找不到MacOSsdk。按照文中开头的步骤即可解决
- 编译过程中会出现
1
fatal error: linux/netfilter/xt_DSCP.h: No such file or directory
这是由于我的源码没有直接在/Volumns/android
下下载,是从别的地方下载完之后拷贝过来的。而编译源码会严格区分大小写的。相应目录下有小写的头文件。
解决方案是:
- 严格按照官方文档描述,在相应目录下下载源码
- 在
./external/iptables/include/linux/netfilter
中创建头文件xt_DSCP.h
。在该头文件中加入如下代码:
1 | /* |
- Java文件找不到
1 | external/doclava/src/com/google/doclava/ClassInfo.java:20: error: package com.sun.javadoc does not exist import com.sun.javadoc.ClassDoc |
解决方案是在配置文件中加入
1 | $ export PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/bin:$PATH |
- 编译最新版的aosp可能会遇到
Unsupported curl, please use a curl not based on SecureTransport
。解决方案是运行一下命令
1 | brew install curl --with-openssl |