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 init
和repo 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.tgz
和qcom-sailfish-qp1a.191005.007.a3-191228fe.tgz
,看名称分别是google和芯片厂家开发的。
5.使用tar -xvf
命令分别解压这两个tgz文件得到两个sh脚本extract-qcom-sailfish.sh
和extract-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.txt
、boot.img
、ramdisk.img
、system.img
、system_other.img
、userdata.img
、vendor.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
注意:
-
fastboot flashall -w --disable-verity --disable-verification
是刷机时关闭检查,没有试过,应该是关闭了android-info.txt
描述的限制 - 一定要是整个源代码编译成功了再刷机,而不是出现了上面的几个img文件就刷机了,第一次编译失败的时候我看到有这些文件了直接刷机变砖头,应该是镜像还不完整
- 如果刷机成功了,也不要换,主要还是进入bootloader模式就还有有救,最多找个完整镜像刷回去了
- 变砖头解决方法可以参考