Mac 系统下Android 源码的下载与编译
我的环境:
- 系统版本:MAC OS X EI Capitan 10.11.6
- 处理器 : Intel Core i7
- 内存 : 16 GB ;500G 闪存
- JDK : 1.8.0_91
- Xcode : Version 8.2.1 (8C1002)
Mac 下载源码的一般步骤:
- 创建一个大小写敏感的磁盘镜像;因为源码只能在大小写敏感的磁盘上编译
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 60g ~/android.dmg.sparsefile
其中的android.dmg.sparsefile是自定义的,可以修改。这里给磁盘分配了60G,如果你下载版本较老的源码是没有问题的,我下的是 7.0 的系统,有些大,下载编译完后磁盘镜像达到了90.37G,所以这里要注意一下;但是你已经创建好了,但又突然发现不够用了,那我们可以通过以下的命令给镜像重新设置大小;注意镜像都有个后缀:"sparseimage",如果建议加上后缀名。
hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparsefile.sparseimage
- 加载分区
hdiutil attach ~/android.dmg.sparsefile.sparseimage -mountpoint /Volumes/android
下载repo
repo是一种工具,建立在Git上。repo可以管理许多Git存储库,并上传版本控制系统,处理Android开发工作流程的自动化部分。repo其实一个Python写的脚本,我们需要下载的就是一个Python写的脚本文件。这里最好回到你当前用户的根目录,执行以下命令mkdir ~/bin # 创建文件夹 PATH=~/bin:$PATH #设置环境变量 curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo #下载repro 到/bin/repo文件里 chmod a+x ~/bin/repo # 给repo 文件权限
如果上面的
https://storage.googleapis.com/git-repo-downloads/repo
连接有问题可以使用这个地址代替https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
去当前目录下找到 bin/repo 文件,打开,大概在第8行左右,将
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
替换成
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
为什么这样干,大家大概都知道为什么;googlesource国内网络访问比较麻烦,这里把它替换成清华大学提供的镜像
修改文件描述符限制
Mac 系统下默认只能同时打开 1024 个文件,而在进行Android源码编译时有可能会超出这个限制,因此需要解除这个限制在~/.bash_profile中添加以下内容:
# set the number of open files to be 1024 ulimit -S -n 1024
进入到分区,就上面的 /Volumes/android
cd /Volumes/android/ mkdir android-source cd android-source
开始下载
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b 你想下载的版本分支
如果需要某个特定的 Android 版本,可以参看这个地址,这里有很多版本分支,找一个你顺眼的下载吧,下面提供部分版本分支图:
如果init正常,就可以执行下面的命令同步代码了;如果有问题多执行几次看看。这个过程很慢,当然也要看你的网速。一般都要几个小时吧。
repo sync
如果下载完毕之后,你会看到类似的内容:
安装 MacPort ,如果你安装了可以略过了
安装完毕之后,会在你电脑的根目录有个opt文件夹。一般它会给你设置好环境变量,如果没有你就需要手动设置了
通过MacPort安装make,git,GPG, 如果本地已经安装,或者版本已经比较新了,无需安装
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
编译
下载完毕之后就要编译了,进入到我们下载的源码的目录
cd /Volumes/android/android-source
source build/envsetup.sh #初始化编译环境
lunch full-eng #选择编译目标
make # 或者 make -j4
如果成功了你会看到类似以下的内容:
编译遇到的问题
- Mac SDK 不支持的情况,因我这里都是最新更新的Xcode ,使用的 是SDK12 ,但是它支持的最高是11,最后找同事拷贝一份才好。
- Android 7.1的源码是使用了jack-server,它在用户目录下生成了一个 .jack_setting文件;在编译时,竟然没有读写权限,害的我又重新给它设置权限后,又重新编译的。
- 可能还有其它的问题,大家遇到了就自己百度Google一下就好了。
- Mac SDK 不支持的情况,因我这里都是最新更新的Xcode ,使用的 是SDK12 ,但是它支持的最高是11,最后找同事拷贝一份才好。
使用的AndroidStudio阅读源码
上面编译成功后,在 /Volumes/android/android-source 目录下执行
mmm development/tools/idegen/
稍等执行完毕之后,再执行下面的命令
sh ./development/tools/idegen/idegen.sh
- 最后打开AndroidStudio
File–>Open–>找到源码目录下的android.ipr文件
最后的图如下:
在模拟器上运行
最后你也可以到模拟器上看看运行效果
到目录/Volumes/android/android-source/out/target/product/generic 下执行下面的命令:
emulator -image system.img -data userdata.img -ramdisk ramdisk.img
或者直接执行 emulator
也行,
如果出现,
emulator: WARNING: system partition size adjusted to match image file
执行以下下面这个命令:
emulator -partition-size 1024
就OK了。
最后上几张运行的截图: