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

背景

作为一个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/...

sql 复制代码
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

配置Git

arduino 复制代码
git config --global user.email "[email protected]"
git config --global user.name "Your Name"

安装 Repo

bash 复制代码
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

把repo源换成国内镜像,不然慢死

先设置一下repo的国内代理。在自己shell的rc里面最后一行加入

ini 复制代码
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

这样就行了。

保存之后

bash 复制代码
source ~/.zshrc

下载AOSP源码

先去这个网站,找一下手机型号对应的仓库分支。 source.android.com/docs/setup/...

图中,build ID 版本 支持的设备,必须跟你手机严格匹配,错一个都不行,这是随便截的,我手机pixel 8 pro,图中是pixel 9,所以这个肯定不行。

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

再看Android版本和Build号

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

复制代码
android-14.0.0_r4

先切到aosp目录

bash 复制代码
mkdir ~/aosp
cd ~/aosp

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

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

替换后,也就是

csharp 复制代码
repo init --partial-clone -b android-14.0.0_r4 -u https://android.googlesource.com/platform/manifest

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

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

下面开始真的下载代码。

bash 复制代码
repo sync -c -j8

大概2h左右....

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

bash 复制代码
repo sync -j1 --fail-fast

驱动下载

去官方找对应的驱动。

首先,打开手机的设置,滑到最下面,点关于手机,再滑动到最下面,看到Build号

去官网,找到自己Build号对应的驱动。

developers.google.com/android/dri...

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

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

bash 复制代码
cp google_devices-husky-ud1a.230803.022.a3-5ee7d7f9.tgz ~/aosp

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

bash 复制代码
cd ~/aosp
tar xf google_devices-husky-ud1a.230803.022.a3-5ee7d7f9.tgz

执行脚本

bash 复制代码
./extract-google_devices-husky.sh

按D快速翻页

最后输入I ACCEPT,回车。

编译源码

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

bash 复制代码
source build/envsetup.sh

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

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

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

从 Android 15 开始,lunch 命令不再显示交互式菜单,而是要求用户直接指定目标组合。
source.android.com/docs/setup/...

这是官网的链接,点进去看下面这部分,理解一下构建的target应该怎么填。

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

复制代码
list_products

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

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

复制代码
 lunch aosp_husky-ud1a-userdebug

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

复制代码
m dist

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

报错了。。

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

bash 复制代码
# 安装 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

编译完成了。

刷机

切到编译产物的目录

bash 复制代码
cd ~/aosp/out/dist

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

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

等手机进入fastboot模式

复制代码
adb reboot fastboot

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

复制代码
fastboot flashing unlock

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

rust 复制代码
< waiting for device >

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

然后继续

复制代码
fastboot flashing unlock

摁电源建解锁。

开始刷机。

复制代码
fastboot flashall -w

又报错了。。

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

重新输入

复制代码
fastboot flashall -w

刷一点,又报错了。。。

因为aosp自己编译是不能生成vendor.img的,里面专门放的硬件厂商闭源组件。

还记得文章最开头下载的驱动吗,重新copy,再编译一遍吧。(反正有缓存,几分钟就好了。)

然后再执行上面的刷机命令。

继续刷。。

复制代码
fastboot flashall -w

自动重启开机。ok yeah!!

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

arduino 复制代码
adb install via-release-cn.apk

Debug

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

bash 复制代码
# 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)

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

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

随便debug了。都能断上。

变砖怎么办

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

参考

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

相关推荐
QING6183 分钟前
Kotlin coerceAtMost用法及代码示例
android·kotlin·源码阅读
QING6185 分钟前
Kotlin commonSuffixWith用法及代码示例
android·kotlin·源码阅读
QING6187 分钟前
Kotlin coerceAtLeast用法及代码示例
android·kotlin·源码阅读
光军oi1 小时前
Mysql从入门到精通day5————子查询精讲
android·数据库·mysql
鸿蒙布道师10 小时前
鸿蒙NEXT开发Base64工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
jiet_h11 小时前
Android adb 的功能和用法
android·adb
美狐美颜sdk11 小时前
美颜SDK兼容性挑战:如何让美颜滤镜API适配iOS与安卓?
android·深度学习·ios·美颜sdk·第三方美颜sdk·视频美颜sdk
居然是阿宋11 小时前
深入理解 YUV 颜色空间:从原理到 Android 视频渲染
android·音视频
KevinWang_12 小时前
DialogFragment 不适合复用
android
古鸽1008613 小时前
Audio Hal 介绍
android