下载源码
创建分区
由于Android源码是区分大小写的,所以如果是mac设备,需要新建一个区分大小写的分区来存储下载的源码。
创建命令:
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
因为下载后的源码大概有60G,编译建议留70G的空间,否则可能遇到编译失败。如果把分区卸载了重新加载再编译,会重头开始编译,意味着你可能又需要70G的空间,所以no zuo no die,编译存储空间预留大一点。
增加空间命令:
hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
下载必要的工具
通过 MacPorts 获取 Make、Git 和 GPG 程序包:
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
下载repo
确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
下载 Repo 工具,并确保它可执行:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
新建一个文件作为存储目录
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
使用你注册过的google账户作为git账户下载
这会增加你下载成功的几率,如果不做,google可能会在中途断掉链接
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
初始化源码树
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r4
开始下载
repo sync
搭建编译环境
下载nexus5x的驱动
下载后解压会得到一个名为extract-lge-bullhead.sh的文件,放到下载好的源码根目录,然后执行脚本/.extract-lge-bullhead.sh,这个时候源码根目录会生成一个vendor文件夹,这就是驱动文件。
编译准备工作
- 设置文件描述符数量上限
在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。
要提高此上限,请将下列行添加到 ~/.bash_profile 中:
ulimit -S -n 1024 - 优化编译环境
运行命令:
export USE_CCACHE=1
prebuilts/misc/darwin-x86/ccache/ccache -M 50G
开始编译
source build/envsetup.sh
lunch + shift键会提示你可以编译的分支,比如bullhead_userdebug
make -j8
刷入nexus5x
进入recovery模式,在源码根目录运行fastboot -w flashall,等待刷机成功,享受自己编译的android系统。
terminal运行adb root,可以看到系统已经是root。
源码导入android studio阅读
编译源码idegen模块及生成AS配置文件(*.ipr)
在源码根目录执行
mmm development/tools/idegen/
结果如下图
执行脚本
/. development/tools/idegen/idegen.sh
这时候去源码根目录看会发现多了android.ipr和android.iml。
- 导入android studio
然后android studio 打开已有项目选择android.ipr,加载完后即可阅读android源码。
解决跳转问题
这时候你打开Activity.java,然后随便点击一个类,不会跳转到源码相关目录,而是会去引用的library里的类。
删除除图片外的所有引用