背景
作为一个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下的os
,view
,app
就行了,对于应用层开发者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/...