0x01 下载并同步AOSP源码
中科大镜像源
http://mirrors.ustc.edu.cn/help/aosp.html

使用md5sum验证一个软件包是否损坏。
安装好git之后需要配置一下用户名和邮箱,这里其实可以随便填不需要真的有用
1 | $ git config --global user.email hbxjyzx@sina.com |
然后配置一下repo工具
1 | mkdir ~/bin |
还要创建一个python的软链接,编译系统要求python版本在3.5以上
1 | sudo ln -s /usr/bin/python3.8 /usr/bin/python |
然后就可以使用init来同步指定版本的安卓源码了
1 | #切换到aosp目录下,去执行以下指令 |
获取到详细安卓版本的网站:https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn

需要安装openjdk8
1 | sudo apt install openjdk-8-jdk |
这里建议直接使用AOSP中的openjdk,在~/.bashrc文件中添加以下的内容
1 | export JAVA_HOME=/root/aosp/prebuilts/jdk/jdk8/linux-x86/ |
添加依赖参考:https://source.android.com/docs/setup/build/initializing?hl=zh-cn
1 | sudo apt-get install git-core gnupg flex bison build-essential zip zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig ninja-build curl |
然后还得需要下载好手机对应的驱动相关的东西,这里我使用的是Nexus5x,最后支持的是android-8.1.0_r52版本的安卓代码,于是我先切换一下代码。之后需要下载一个驱动,这里我下载好了,在这个网站:https://developers.google.com/android/drivers?hl=zh-cn

需要将该压缩包移动到aosp目录下,然后解压出来

解压出来是两个sh脚本,执行就可以了

判断手机对应的内核是否存在,访问链接:https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn,如果没有的话,需要另外下载或者编译了。

开始编译源码,首先要导出一点点环境变量
1 | export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" |
然后这里才开始编译
1 | make clobber |
就开始编译,需要经过很长的时间才能完成编译

tips:这里我编译的是android8的版本,要注意将python的版本换成python2.7的。
finally,编译成功了,去out/target/product/bullhead文件夹就可以找到编译出来的成果。

0x02 刷机
先去google下载刷机包:
https://developers.google.com/android/images?hl=zh-cn#bullhead

下载好并解压之后是这样子的

然后其中比较关键需要修改的是这个image-xxx.zip中的文件,可以看到这里存在的都是很多img文件,这个是google的成品系统,而AOSP其实是半成品,我们要将我们自己编译的img文件覆盖掉这4个img文件。

首先将该zip包解压出来,然后删除所有的img文件,然后将我们编译好的img文件都拷贝进来
1 | $ > 7z x image-bullhead-opm1.171019.011.zip -oimage-bullhead-opm1.171019.011 |
然后将手机设置到fastboot模式中
1 | $ > adb reboot bootloader |
终于成功刷入了,截个图纪念一下

0x03 疑难杂症
AOSP无法联网
解:使用adb执行:adb shell settings put global captive_portal_mode 0
参考链接:
https://blog.seeflower.dev/archives/12/
https://blog.seeflower.dev/archives/12/