您现在的位置是:首页 >技术杂谈 >记一次 Android 源码编译刷机过程网站首页技术杂谈
记一次 Android 源码编译刷机过程
0 背景
为了能在开发设备上运行 adb root 命令得到 root 权限,获得更加强大的调试能力、开发体验,方便以后阅读源码时 Debug 跟踪、进行定制化开发,需要编译 Android 源码 userdebug 版本并刷入手机当中。
1 准备
1.1 硬盘
首先 Android 源码占用内存很大,一般占用 200、300 G,恰逢固态硬盘降价,花费 400 置入了 1T 的 PCIE 4.0 固态硬盘。主板只有一个 M.2 插槽,于是买了一个 M.2 固态硬盘转接卡。
1.2 手机
自己是想刷 Android 13 版本的,并且考虑到手机的流畅程度以及成本,花费 650 置入了 O 版(能够开启 BootLoader)的 Pixel 4。 Pixel 4 有 90 hz的刷新率,且能刷 Android 13 的代码。
将 Android 源码某条分支的源码编译出 img 文件并刷入手机中,是需要 Google 提供的驱动文件的
比如 Pixel 4 可以刷的 Android 13 分支就有四条分支,我选择了其中的 TP1A.220624.014 ,对应是 android-13.0.0_r1 分支。
某台设备有什么分支可以刷可以参考一下链接:
Nexus 和 Pixel 的驱动程序二进制文件
BuildId 与 Android 源码分支的对应信息
1.3 Ubuntu 系统
尝试在 Windows 系统的 Ubuntu 子系统上操作,但没成功,于是使用 UltraISO 刻录 Ubuntu 系统盘,给新买的硬盘刷了个 Ubuntu 系统,在新系统上进行操作。就是每次开机需要按 F12 进入 BIOS 选择系统。
在 /etc/udev/rules.d 目录下添加 udev 规则包。否则当使用 adb 指令时会提示权限不足。
1.4 环境搭建
下载代码需要用到 git 工具、repo 工具、编译环境
git 工具
sudo apt-get install git
git config --global user.email "test@test.com"
git config --global user.name "test"
repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo > ~/bin/repo
chmod a+x ~/bin/repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
编译环境
#jdk 在 Android 源码 prebuilts/jdk 中有,建议直接设置环境变量,而不是直接用 apt-get 安装
#sudo apt-get install openjdk-8-jdk
#sudo apt-get install openjdk-8-jre
# 下列安装,可能会出问题,直接百度即可解决。问题比较容易处理
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-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
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-get install libssl-dev
1.5 源码及驱动代码代码下载
git 安装
sudo apt-get install git
git config --global user.email "xxx@xx.com"
git config --global user.name "xxx"
repo 安装
mkdir ~/bin
# 下载 repo 文件
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo > ~/bin/repo
# 添加权限
chmod a+x ~/bin/repo
代码下载
# 配置 repo 的临时环境变量
PATH=~/bin:$PATH
# 下载想要下载的分支
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-13.0.0_r1
# 同步代码
repo sync -j4
下载驱动文件
在网址 Nexus 和 Pixel 的驱动程序二进制文件 中我们根据所选分支下载对应的驱动程序。比如这次 pixel4 选的 TP1A.220624.014。对应的是
将驱动程序(sh脚本文件)下载解压并执行,执行之后多出 vendor 目录
注意: 如果不添加这个驱动程序,全编 AOSP 生成的镜像会缺少一些 img 文件。
1.6 全编代码
在 AOSP 目录下
source build/envsetup.sh
lunch
# 要编译的是 flame-userdebug,根据情况这里我选了 22
22
make -j4
但是真正编译时会遇到一些问题,在百度了之后无非要修改 swap 的大小。还有 jdk 版本的问题,这时根据情况使用 aosp 中的即可。
编译成功之后的镜像文件在"/out/target/product/手机型号/" 目录下。
1.7 安装 android studio, 并将镜像刷入 Pixel 设备中
因为要用到 adb,fastboot 等工具。下载 android studio 工具后就有。不用专门去找这些东西。下载之后在 .bashrc 文件中添加环境变量
export PATH=$PATH:/home/xxx/Android/Sdk/platform-tools
让手机进入 bootloader
# 进入bootloader模式
adb reboot bootloader
手机界面显示 bootloader模式之后,在 “/out/target/product/手机型号/” 目录下
export ANDROID_PRODUCT_OUT=./
# 自动刷入 -w双清
fastboot flashall -w
# 等刷入之后,重启手机
fastboot reboot