Mac 系统下Android 源码的下载与编译

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 下载源码的一般步骤:

  • 创建一个大小写敏感的磁盘镜像;因为源码只能在大小写敏感的磁盘上编译

1hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 60g ~/android.dmg.sparsefile 2

其中的android.dmg.sparsefile是自定义的,可以修改。这里给磁盘分配了60G,如果你下载版本较老的源码是没有问题的,我下的是 7.0 的系统,有些大,下载编译完后磁盘镜像达到了90.37G,所以这里要注意一下;但是你已经创建好了,但又突然发现不够用了,那我们可以通过以下的命令给镜像重新设置大小;注意镜像都有个后缀:"sparseimage",如果建议加上后缀名。

1hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparsefile.sparseimage 2
  • 加载分区

1hdiutil attach ~/android.dmg.sparsefile.sparseimage -mountpoint /Volumes/android 2
  • 下载repo

repo是一种工具,建立在Git上。repo可以管理许多Git存储库,并上传版本控制系统,处理Android开发工作流程的自动化部分。repo其实一个Python写的脚本,我们需要下载的就是一个Python写的脚本文件。这里最好回到你当前用户的根目录,执行以下命令

1mkdir ~/bin # 创建文件夹 2PATH=~/bin:$PATH #设置环境变量 3curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo #下载repro 到/bin/repo文件里 4chmod a+x ~/bin/repo # 给repo 文件权限 5

如果上面的https://storage.googleapis.com/git-repo-downloads/repo连接有问题可以使用这个地址代替https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

去当前目录下找到 bin/repo 文件,打开,大概在第8行左右,将

1REPO_URL = 'https://gerrit.googlesource.com/git-repo' 2

替换成

1REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo' 2

为什么这样干,大家大概都知道为什么;googlesource国内网络访问比较麻烦,这里把它替换成清华大学提供的镜像

  • 修改文件描述符限制

Mac 系统下默认只能同时打开 1024 个文件,而在进行Android源码编译时有可能会超出这个限制,因此需要解除这个限制在~/.bash_profile中添加以下内容:

1 2# set the number of open files to be 1024 3 4ulimit -S -n 1024    5
  • 进入到分区,就上面的 /Volumes/android

1cd /Volumes/android/ 2mkdir android-source 3cd android-source 4
  • 开始下载

1repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b 你想下载的版本分支 2

如果需要某个特定的 Android 版本,可以参看这个地址,这里有很多版本分支,找一个你顺眼的下载吧,下面提供部分版本分支图:

如果init正常,就可以执行下面的命令同步代码了;如果有问题多执行几次看看。这个过程很慢,当然也要看你的网速。一般都要几个小时吧。

1repo sync 2

如果下载完毕之后,你会看到类似的内容:

  • **安装 MacPort ** ,如果你安装了可以略过了

安装完毕之后,会在你电脑的根目录有个opt文件夹。一般它会给你设置好环境变量,如果没有你就需要手动设置了

  • 通过MacPort安装make,git,GPG, 如果本地已经安装,或者版本已经比较新了,无需安装

1 POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg 2
  • 编译

下载完毕之后就要编译了,进入到我们下载的源码的目录

1 cd /Volumes/android/android-source 2 source build/envsetup.sh #初始化编译环境 3 lunch full-eng #选择编译目标 4 make # 或者 make -j4 5

如果成功了你会看到类似以下的内容:

  • 编译遇到的问题
  1. Mac SDK 不支持的情况,因我这里都是最新更新的Xcode ,使用的 是SDK12 ,但是它支持的最高是11,最后找同事拷贝一份才好。

  2. Android 7.1的源码是使用了jack-server,它在用户目录下生成了一个 .jack_setting文件;在编译时,竟然没有读写权限,害的我又重新给它设置权限后,又重新编译的。 1. 可能还有其它的问题,大家遇到了就自己百度Google一下就好了。

使用的AndroidStudio阅读源码

上面编译成功后,在 /Volumes/android/android-source 目录下执行

1mmm development/tools/idegen/ 2
11. 2

稍等执行完毕之后,再执行下面的命令

1sh ./development/tools/idegen/idegen.sh 2
11. 最后打开AndroidStudio 2

File–>Open–>找到源码目录下的android.ipr文件
最后的图如下:

在模拟器上运行

最后你也可以到模拟器上看看运行效果
到目录/Volumes/android/android-source/out/target/product/generic 下执行下面的命令:

1emulator -image system.img -data userdata.img -ramdisk ramdisk.img 2

或者直接执行 emulator也行,
如果出现,
emulator: WARNING: system partition size adjusted to match image file
执行以下下面这个命令:

1emulator -partition-size 1024 2

就OK了。
最后上几张运行的截图:

代码交流 2021