安卓源码编译刷入nexus6p
前言
为什么要做编译一份源码刷入真机这件事情?
通过准备编译环境,下源码,编译,刷入设备这些事情,可以使我们对aosp有更好的理解.此外,要想在逆向的路上走下去,不可避免的要读一读安卓的源码,然后修改源码以过掉一些反调试的手段.
过程
首先参考官网得知大概是以下几步.
- 搭建编译环境
- 下载源码
- 进行编译
- 编译源码
- 刷入设备
于是我在笔记本上安装了一个ubuntu14.04的系统,开始按照官网搭建编译系统,但是踩了很多坑,在搜集资料时,我意外的发现了这篇博客.我决定按照这个教程搞.于是按照顺序做了以下几件事
1. 在ubuntu上安装docker
这里有一点需要注意,docker只能跑在64位的ubuntu上,而64位的ubuntu在ubuntu官网上显示的下载链接是这样的64-bit PC (AMD64) desktop image
,经过实测在intel的cpu上也能跑.
2. 简单了解docker
在这里我们可以将docker理解成一个很厉害的虚拟机,教程简单的在官网上看一下就好了,英文不好的可以看这本教程Docker —— 从入门到实践,其实如果不踩坑的话,根本不用了解docker的:)
3. 按照教程执行脚本
找一个合适的目录依次执行以下脚本
curl -O https://raw.githubusercontent.com/tiann/docker-aosp/master/tests/build-nougat.sh
bash ./build-nougat.sh
这里需要注意的是,down下来的脚本里边的版本不一定是你需要的版本,我们需要在这里找到适合自己设备的版本然后替换脚本里边的版本.
此外如果将编出的系统刷入真机,我们还需要将脚本里边lunch aosp_arm-eng
这一行里的aosp_arm-eng
改成相应的设备号.
正如教程里所说只要等待就好了,如果一切顺利的话,在下载两小时左右之后(50M带宽的网)就可以进行编译,编译需要大概两个小时(8g内存,i7 6700cpu),编完之后可以看到如下场景
4. 搞定驱动
到现在我们已经编译出可以在虚拟机上跑的安卓系统,但是如果想要刷入设备的话还要搞定相应的驱动.这里我在网上找到了两个办法,一个是下载相应脚本再编译(我没试).另一种是下载相应的factory image然后解压.从里边取出vender.img这就是编好的驱动.
5. 刷入设备
按照官网的教程解了bl锁,进fastboot,然后flash all
就好了.没啥说的.大概5分钟后就可以进系统了
,上车成功!
6. 存在问题
- 指纹识别模块不能用,原因未知.
- 在cpu忙的时候屏幕边缘会闪.
- 每次开机都需要手动关闭sellinux,要不然xposed不能用
7. 后续
如果后续再需要编译指定模块的话,把之前down下来的脚本里边的关于初始化代码库的内容注释掉然后把make -j $cpus
替换成自己要做的操作就好了.