1. 环境准备

  • 建议参考之前编译的aosp12这篇文章,因为我这边之前编译成功过,这次直接编译aosp基本没报错
  • 文章链接:

1.1 安装VMware虚拟机、Linux编译环境以及aosp编译依赖的第三方依赖

  • Android系统源代码编译优先推荐使用Ubuntu环境,所以Window上需要先安装VMware虚拟机,然后再使用虚拟机安装Ubuntu 20.04.6 LTS Desktop版本
  • 安装Ubuntu需要给16G以上的内存分配。内存分配安装完之后也是可以修改的。我一开始给了8G内存编译到最后一刻一直显示OutOfMemory,改为16G重新编译后才成功
  • 准备aosp编译环境、下载android-10.0.0_r17分支源代码、下载pixel驱动文件、编译源代码、pixel真机刷机
  • 为什么是下载android-10.0.0_r17分支的源代码,因为pixel不支持更高版本分支的了,具体支持哪个分支可以查看:https://source.android.com/docs/setup/about/build-numbers

1.2 安装配置git、curl、python、open-jdk8以及第三方依赖

  • 安装配置git

1.安装git:sudo apt-get install git 2.配置邮箱:git config --global user.email "xx@qq.com" 3.配置用户名:git config --global user.name "xx"

  • 安装curl

1.安装curl:sudo apt-get install curl

  • 安装python

1.安装python3:sudo apt-get install python 2.terminal窗口输入python看看是不是python3,需要python3,python2不行的,如果是python2需要想方法重新安装或者软连接到python3

  • 安装open-jdk8

1.先更新依赖:sudo apt-get update 2.安装open-jdk8:sudo apt-get install openjdk-8-jdk

  • 安装第三方依赖

1.安装aosp编译需要的第三方依赖库:sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5

2. 下载aosp android10.0.0_r17源码

2.1 准备仓库以及下载源代码

  • 准备repo仓库

1.创建bin目录:mkdir ~/bin 2.添加bin目录到PATH:PATH=~/bin:$PATH 3.下载repo到~/bin目录:curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo 4.给~/bin/repo文件可执行权限:chmod a+x ~/bin/repo

  • 下载android-10.0.0_r17源代码(其实就两句话:repo initrepo sync)

1.创建一个工作目录:mkdir aosp10.0.0_r17 2.cd来到该工作目录:cd aosp10.0.0_r17 3.设置下载清华源,默认google源需要FQ:export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' 4.初始化10.0.0_r17分支源代码仓库:repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r17 5.最后执行sync下载源代码:repo sync

2.2 提权驱动源代码

  • 下载驱动文件

1.大家都知道,不同手机驱动程序是不一样的,如果编译源代码之前没有准备好执行驱动文件,编译好的系统刷机到真机后可能就驱动不了手机硬件,比如没有声音等等
2.我的手机是pixel手机,是google厂家的,所以到google官方下载对应驱动文件
3.驱动下载地址:https://developers.google.com/android/drivers 4.下载得到两个tgz文件 google_devices-sailfish-qp1a.191005.007.a3-a1615a0f.tgzqcom-sailfish-qp1a.191005.007.a3-191228fe.tgz,看名称分别是google和芯片厂家开发的。
5.使用tar -xvf命令分别解压这两个tgz文件得到两个sh脚本extract-qcom-sailfish.shextract-google_devices-sailfish.sh,将解压得到的两个sh脚本copy到工作目录aosp10.0.0_r17
6.分别使用这两个脚本文件./extract-qcom-sailfish.sh./extract-google_devices-sailfish.sh,会提示你是否接受协议,一直按return直到第八点输入I ACCEPT即可

3. 编译源代码

  • 每次编译都是走以下步骤

1.来到工作目录:cd aosp10.0.0_r17 2.导入编译环境:source build/envsetup.sh 3.选择编译目标:lunch aosp_sailfish-userdebug 4.make执行编译:make -j4

4. pixel真机刷机

  • 编译产物

1.编译产物在aosp10.0.0_r17/out/target/product/sailfish/目录下
2.编译产物包括android-info.txtboot.imgramdisk.imgsystem.imgsystem_other.imguserdata.imgvendor.img等img文件

  • 解锁手机

1.安装手机驱动程序,这个很重要,不只是adb devices查看到手机就行,还要在我的电脑-设备管理器-Android Device能看到已经安装驱动能手机到手机了才行
2.要刷机先解锁,pixel解锁流程(其他手机自行解决):来到开发者选择 -> 打开OEM解锁 -> 进入bootloader模式adb reboot bootloader -> 解锁'fastboot flashing unlock'
3.解锁会清除手机上的所有数据,这个要注意事先备份好。另外不同手机解锁方法不同,有些手机还不给解锁的。。。

  • 真机刷机

1.设置ANDROID_PRODUCT_OUT环境:export ANDROID_PRODUCT_OUT=xxx/out/target/product/sailfish 2.进入bootloader模式adb reboot bootloader 3.一句话刷机:fastboot flashall -w

注意:

  1. fastboot flashall -w --disable-verity --disable-verification是刷机时关闭检查,没有试过,应该是关闭了android-info.txt描述的限制
  2. 一定要是整个源代码编译成功了再刷机,而不是出现了上面的几个img文件就刷机了,第一次编译失败的时候我看到有这些文件了直接刷机变砖头,应该是镜像还不完整
  3. 如果刷机成功了,也不要换,主要还是进入bootloader模式就还有有救,最多找个完整镜像刷回去了
  4. 变砖头解决方法可以参考