清华镜像站地址:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
google官网代号标记和细分版本:https://source.android.com/setup/start/build-numbers
pixel3 Binary Drive下载地址:https://developers.google.com/android/drivers#walleye
google kernel地址:https://source.android.com/setup/build/building-kernels#id-version
1. 首先通过清华源下载aosp最新代码压缩包
1.1 安装repo工具
mkdir ~/bin && cd ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
可以把repo的路径加入到环境变量里这样就不用每次都跑临时环境变量
sudo vi ~/.bashrc
// 添加如下语句到文件末尾
PATH=~/bin:$PATH
// 保存
1.2 下载每月更新的初始化包
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 下载完成记得生成md5码校验,因为文件比较大,校验不对的话,编译出来的代码会出问题
# 另外,如果是月底去下载aosp-latest.tar需要注意,因为该包每月更新一次,
# 包很大,有90G,短时间内下载不完,那这个时候,请下载带日期的最新包,
# 避免更新aosp-latest.tar导致数据出入,其实aosp-latest.tar包就是网站上
# 最晚月份的包,只是重命名了而已
1.3 同步完成后,根据自己的硬件手机来制定对应的分支拉出代码,我使用的是谷歌pixel3
下载Android11的代码
从这里可以查出对应pixel3最新Android11的分支号,然后使用下面命令拉出,
google官网代号标记和细分版本:https://source.android.com/setup/start/build-numbers
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r17
repo sync
等待sync完成,一般晚上12点开始,很快。
2. 开始编译之前,进行编译依赖包安装,为了提高软件包,安装速度,请自行修改软件源为国内的源,我这里使用了阿里云的源。
sudo apt install openjdk-8-jdk -y #请输入java -version确认安装正确
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib -y
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386 -y
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt install make make-guile -y
sudo apt-get install tofrodos -y
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386
安装依赖:
sudo apt-get install libesd0-dev 可能会出现错误,请参考下面排错进行解决
3. 提取pixel3手机对应的kernel和bootloader文件,这部分谷歌没有开源,只有对应的image包,是生成在sh脚本里面,只能说谷歌厉害,直接用脚本提取就可以,所以需要下载。
Binary Drive下载:
https://developers.google.com/android/drivers#walleye
选取pixel3手机对应Android版本的编号,我选的是这个build id RP1A.201105.002这个版本
这个脚本可以查看,
Pixel 3 binaries for Android 11.0.0 (RP1A.201105.002)
两个都进行下载,一个是google vendor,一个qcom。
解压得到
extract-google_devices-blueline.sh
extract-qcom-blueline.sh
将这两个脚本放到aosp代码目录下,进行提取
sh extract-google_devices-blueline.sh
sh extract-qcom-blueline.sh
这里需要一直按回车进行读取下一行,然后到最后输入I ACCEPT,进行确认
由于很容易错过最后一行,可以在运行之后,直接 / 进行搜索,"ACCEPT",直达最后一行
然后输入 "I ACCEPT" 提取镜像,此处应有掌声(太厉害了)
4. 编译,等待编译完成
make -j4 | tee make.log
5. 刷机
将pixel3连接上电脑,进入bootloader模式
adb reboot bootloader
把out目录下编译出来的*.img镜像刷进机器
fastboot flashall -w
提示ANDROID_PRODUCT_OUT no set,将存放img的路径配置到环境变量里,设置好之后,重来一遍
这次提示:fastboot: error: could not read android-info.txt
将out目录下的android-info.txt拷贝准备刷机器的img目录下
成功,Done!!!
排错:
1. sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev 报错如下:
E: Unable to locate package libesd0-dev
# 解决方法:
sudo vi /etc/apt/sources.list
# 在文件末尾添加如下信息:
deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe
# 更新源之后并进行重新安装,
sudo apt-get update && sudo apt-get install libesd0-dev
开始编译出错:
[100% 1/1] out/soong/.minibootstrap/minibp out/soong/.bootstrap/build.ninja
FAILED: out/soong/.bootstrap/build.ninja
out/soong/.minibootstrap/minibp -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/.bootstrap/build.ninja.d -globFile out/soong/.minibootstrap/build-globs.ninja -o out/soong/.bootstrap/build.ninja Android.bp
internal error: could not open symlink hardware/qcom/sm7250/Android.bp; its target (gps/os_pickup.bp) cannot be opened
ninja: build stopped: subcommand failed.
16:26:06 soong minibootstrap failed with: exit status 1
----解决方法:把对应的mk和bp文件重命名
cd android-11.0.0_r17/hardware/qcom/sm7250
mv Android.bp Android.bp.ori
mv Android.mk Android.mk.ori
重新开始编译,编译通过没有问题。