- 问题背景
- 解决方法
- 总结
阅读之前注意:
本文阅读建议用时:10min
请谨慎参考本文,申请的磁盘镜像空间可能无法返回给原磁盘空间。
本文阅读结构如下表:
项目 | 下属项目 | 测试用例数量 |
问题背景 | 无 | 0 |
解决方法 | 无 | 1 |
总结 | 无 | 0 |
问题背景
对安卓源码比较感兴趣,尝试着编译了一下。目前最简单的方法,似乎就是用Docker这种虚拟机来进行编译了。
解决方法
- 根据官网的说明,通过repo来拉取安卓对应版本的分支,每个版本的安卓源码的拉取和编译可能会达到300G或者更多。
- 执行如下命令,创建一个200G的区分大小写的磁盘镜像
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 200g ~/android.dmg
- 执行以上命令后,会生成 android.dmg 或者 android.dmg.sparseimage 文件,如果后期感觉磁盘镜像太小,要设置成300g,可以执行以下命令
hdiutil resize -size 300g ~/android.dmg.sparseimage
- 接着把建立的磁盘镜像挂载到 /Volumes/android 目录下,即执行如下指令
hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android
- 挂载成功后,就可以在 /Volumes/android 目录下进行安卓源码的下载和编译了,之后我们就通过repo来拉取安卓源码,最后通过Docker虚拟机在这个目录下进行编译。
- 到了下载步骤,首先要通过homebrew来安装repo,即打开终端执行
brew install repo
- 终端切换到 /Volumes/android 目录,下载安卓源码。比如我要下载的是android-4.4.4_r2.0.1,则以此执行如下指令
$ cd /Volumes/android
$ repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-4.4.4_r2.0.1
$ repo sync -c
- 完成下载后,就可以在Docker中进行编译了。
相关的坑:
- error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly。遇到这种情况,似乎是http2的bug。需要另外打开终端执行
git config --global http.version HTTP/1.1
- … A new repo (2.8) is available。这种情况,打开终端执行
sudo cp /Volumes/android/.repo/repo/repo /usr/local/bin/repo
,其中路径要根据你终端的提示来改,源路径和目标路径都要改。
其他小技巧:
- 如果想要查看check out出来的分支有多大,cd到对应目录下执行
du -sh *
就会列出当前目录各个文件夹占用空间的大小。
总结
一句话总结:建立磁盘镜像,挂载磁盘镜像,通过repo来下载安卓源码,最后通过Docker来编译安卓源码。
参考资料
- Android软件安全权威指南
- error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly
- 下载Android源码出现的问题