安卓源码编译刷入nexus6p

Author Avatar
贾康 1月 13, 2018

前言

为什么要做编译一份源码刷入真机这件事情?
通过准备编译环境,下源码,编译,刷入设备这些事情,可以使我们对aosp有更好的理解.此外,要想在逆向的路上走下去,不可避免的要读一读安卓的源码,然后修改源码以过掉一些反调试的手段.

过程

首先参考官网得知大概是以下几步.

  1. 搭建编译环境
  2. 下载源码
  3. 进行编译
  4. 编译源码
  5. 刷入设备

于是我在笔记本上安装了一个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),编完之后可以看到如下场景
upload successful

4. 搞定驱动

到现在我们已经编译出可以在虚拟机上跑的安卓系统,但是如果想要刷入设备的话还要搞定相应的驱动.这里我在网上找到了两个办法,一个是下载相应脚本再编译(我没试).另一种是下载相应的factory image然后解压.从里边取出vender.img这就是编好的驱动.

5. 刷入设备

按照官网的教程解了bl锁,进fastboot,然后flash all就好了.没啥说的.大概5分钟后就可以进系统了

upload successful,上车成功!

6. 存在问题
  1. 指纹识别模块不能用,原因未知.
  2. 在cpu忙的时候屏幕边缘会闪.
  3. 每次开机都需要手动关闭sellinux,要不然xposed不能用
7. 后续

如果后续再需要编译指定模块的话,把之前down下来的脚本里边的关于初始化代码库的内容注释掉然后把make -j $cpus替换成自己要做的操作就好了.

参考资料

  1. docker下编译的教程
  2. 一篇不错的博客
  3. aosp网站
  4. 怎么搞定驱动
  5. 编出来的img都起什么作用