Pixel 8 pro 刷AOSP源码 Debug 详细教程(含救砖)

1,409 阅读6分钟

image.png

背景

作为一个Android开发,经常无法断点。受不了,必须刷个原厂设备。

设备

二手 pixel 8 pro O版
Build 号:UD1A.230803.022.A3
主机:
64G内存
i713700kf 16核心 二十四线程
500GB SSD
物理机 Ubuntu 24.04.2 LTS

这些坑点仔细看,我花了800,才把自己的黑砖救回来

严格按照教程来,千万不要用gpt瞎编出来的命令
严格检测手机系统版本,Build号,手机型号
严格检测AOSP下载的分支(不能是主分支),跟手机型号分支错误的,必砖
拿不定主意的,先刷虚拟机玩玩。
主机硬盘剩余空间必须400GB以上。
不能用移动硬盘,试过一次,首次是格式不支持,只能ntfs和ext4,下载完之后,各种配置和权限不对,索性自己不用移动硬盘。
下载必须配置repo的镜像,不然慢死了。 下载的分支必须要跟你手机的Build版本不然就砖头。。 第一次卡开机Google,进不去的时候,等2h,如果没反应,自己去官网的刷机,可以救回来,如果这时候瞎搞,会把fastboot搞坏,彻底黑砖

环境配置 - 安装必需的软件包

source.android.com/docs/setup/…

sudo apt update
sudo apt-get install android-sdk-platform-tools-common rsync wget git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python3

image.png

配置Git

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

安装 Repo

sudo apt-get update
cd ~/bin
wget https://storage.googleapis.com/git-repo-downloads/repo
chmod +x ~/bin/repo
export PATH=$PATH:~/bin

查看版本

repo version

image.png

把repo源换成国内镜像,不然慢死
先设置一下repo的国内代理。在自己shell的rc里面最后一行加入

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

这样就行了。

image.png

保存之后

source ~/.zshrc

下载AOSP源码

先去这个网站,找一下手机型号对应的仓库分支。 source.android.com/docs/setup/…
图中,build ID 版本 支持的设备,必须跟你手机严格匹配,错一个都不行,这是随便截的,我手机pixel 8 pro,图中是pixel 9,所以这个肯定不行。

image.png

打开手机设置,去关于手机,里面会有所有信息,先看设备名称:

image.png

再看Android版本和Build号

image.png

用Build号去搜索,先看红框内是否跟手机信息匹配,如果确认无误,再复制蓝色的这个分支。

image.png

android-14.0.0_r4

先切到aosp目录

mkdir ~/aosp
cd ~/aosp

看一下这个命令,把branch name替换为你手机型号的对应分支。

repo init --partial-clone -b <branch name> -u https://android.googlesource.com/platform/manifest

替换后,也就是

repo init --partial-clone -b android-14.0.0_r4 -u https://android.googlesource.com/platform/manifest

执行,这个只是初始化repo而已。

image.png

下载之前,你确定自己的分支跟手机版本都匹配上了吗,再去检测一遍,不然变砖就老实了

下面开始真的下载代码。

repo sync -c -j8

大概2h左右....

image.png

下载失败的时候,重新用他提示的命令,重新下载就好。

image.png

repo sync -j1 --fail-fast

image.png

image.png

驱动下载

去官方找对应的驱动。
首先,打开手机的设置,滑到最下面,点关于手机,再滑动到最下面,看到Build号
去官网,找到自己Build号对应的驱动。

developers.google.com/android/dri…

image.png

下载到AOSP目录!!!,原地解压。

如果默认下载到了Download目录,记得copy过去

cp google_devices-husky-ud1a.230803.022.a3-5ee7d7f9.tgz ~/aosp

记得把驱动文件换成你自己下载的

cd ~/aosp
tar xf google_devices-husky-ud1a.230803.022.a3-5ee7d7f9.tgz

执行脚本

./extract-google_devices-husky.sh

按D快速翻页

image.png

最后输入I ACCEPT,回车。

image.png

编译源码

先初始化脚本,配置编译环境。

source build/envsetup.sh

image.png

lunch 老版本,可以自己看到能编译的列表

image.png

然后输入对应编译的数字就行了。

lunch,新版代码里面,自己执行lunch,不再展示编译的列表了。

image.png

从 Android 15 开始,lunch 命令不再显示交互式菜单,而是要求用户直接指定目标组合。
source.android.com/docs/setup/…
这是官网的链接,点进去看下面这部分,理解一下构建的target应该怎么填。

image.png

先看自己设备的什么型号的。比如我的pixel 8 pro,代号是 husky 然后通过

list_products

看看,产品列表里面,有没有对应的设备。

image.png

image.png

找到了aosp_husky,然后拼接一下命令,前面aosp固定,中间设备型号的代号husky,再中间的 release_config,是你手机Build号前4位,最后选择userdebug版,用来调试。所以,只需要确定一个设备型号就ok了。

 lunch aosp_husky-ud1a-userdebug

image.png

最后,开始编译吧,大概2h

m dist

机箱开始呼呼转起来,估计会2h左右。第一次编译比较慢。

image.png

报错了。。

image.png

安装一下,因为我是Ubuntu新版,所以把6当成5来用。

# 安装 ncurses 兼容包
sudo apt update
sudo apt install libtinfo5 libncurses5

# 如果提示包不存在,直接链接现有版本(适用于 Ubuntu 22.04+)
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5

然后重新

m

编译完成了。

image.png

刷机

切到编译产物的目录

cd ~/aosp/out/dist

连接手机的时候,pixel 的通知太小了,直接连adb,发现各种报错。。

image.png

最后发现,要从通知下拉,把仅通电改成文件传输。。无语。

image.png

等手机进入fastboot模式

adb reboot fastboot

5c75f01fe9175f9c1a9c7379149f7d8b.jpg

这竟然被locked了。。首先要解锁。

fastboot flashing unlock

我运行这个命令的时候,一直显示

< waiting for device >

参考下面这个文章改一下就好了。 blog.csdn.net/qq_38996911…

然后继续

fastboot flashing unlock

2249d97b6d5997b27b8b2ede7a39b459.jpg

摁电源建解锁。

28eb28ee77a9b89efa212acf7bc2c783.jpg 开始刷机。

fastboot flashall -w

又报错了。。

image.png

把这个环境变量指到aosp下面输出的目录(自己找一下,就是这个路径)。记得末尾加斜杠!。

image.png

重新输入

fastboot flashall -w

刷一点,又报错了。。。

image.png

因为aosp自己编译是不能生成vendor.img的,里面专门放的硬件厂商闭源组件。
还记得文章最开头下载的驱动吗,重新copy,再编译一遍吧。(反正有缓存,几分钟就好了。)
然后再执行上面的刷机命令。

继续刷。。

fastboot flashall -w

image.png

自动重启开机。ok yeah!!

image.png

因为aosp自己啥也没有,所以得安装一下浏览器。 github.com/tuyafeng/Vi…

adb install via-release-cn.apk

Debug

下载对应tag下的osviewapp就行了,对于应用层开发者debug来说,足够了。

# 1. 创建目录并初始化仓库
mkdir aosp-targets && cd aosp-targets
git init
git remote add origin https://android.googlesource.com/platform/frameworks/base

# 2. 配置稀疏检出
git config core.sparseCheckout true
echo "core/java/android/view/*" >> .git/info/sparse-checkout
echo "core/java/android/os/*" >> .git/info/sparse-checkout
echo "core/java/android/app/*" >> .git/info/sparse-checkout

# 3. 拉取指定标签的提交
git fetch --depth=1 origin tag android-14.0.0_r4

# 4. 检出代码
git checkout FETCH_HEAD

找到自己系统的源码目标,一般都在AndroidSdk里面。 android14 (API 34)

image.png

然后用下载的文件,替换这里面。

cd /Users/your-computer-name/aosp-targets/core/java
cp -rf android/ /Users/luke/Library/Android/sdk/sources/android-34/android/

随便debug了。都能断上。

image.png

变砖怎么办

只要还能进fastboot,就有的救,自己用官网的工具即可。 source.android.com/docs/setup/…

参考

source.android.com/docs/setup/…
xdaforums.com/t/build-aos…
source.android.com/docs/setup/…