1. 编译环境准备
1.1 pc 硬件配置
- 500GB 固态硬盘
- 内存: 推荐 64G。 ( 最少16GB . 需要额外挂载48G交换磁盘来避免.)
- ubuntu 18.04
2. 代码下载
由于 android aosp 源码非常大,如果直接从google 下载会很慢。这里可以通过 国内的镜像去下载。具体可以参考清华Android 镜像使用帮助
2.1 安装 repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
2.2 下载 aosp 代码
首先根据手机型号找对应的 aosp 分支。
同步如下网址查询:
-
https://source.android.com/docs/setup/reference/build-numbers?hl=zh-cn#source-code-tags-and-builds
-
这里我使用的是 pixel 6 这款手机
Build ID | tags | version | devices | |
---|---|---|---|---|
AP4A.250105.002.A1 | android-15.0.0_r11 | Android15 | Pixel 6、Pixel 6a、Pixel 6 Pro | 2025-01-05 |
- 需要留意这里的 Build ID, 需要通过 BuildID 找对应的 ROM 编译包
# 创建工作目录
mkdir android-15.0.0_r11
cd android-15.0.0_r11
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-15.0.0_r11
# 开始同步
repo sync -d -c --no-tags --force-sync
这里根据个人的网速,同步时间不等。预计需要 3 ~ 4个小时。
3. 源码编译
3.1 下载对应的 设备驱动文件
我们最终需要将我们编译出来的 ROM 刷机到 Pixel 6 真机上,在编译 aosp 之前需要将 对应设备的驱动文件放置到我们的源码中。可以在如下网址中查询我们设备对应的 驱动文件。
- https://developers.google.com/android/drivers?hl=zh-cn
下载完 google_devices-oriole-ap4a.250105.002.a1-2b51b2d8.tgz将其解压到 aosp 源码目录中。
直接在源码目录中执行 extract-google_devices-oriole.sh 脚本
android-15.0.0_r11$ ./extract-google_devices-oriole.sh
执行过程中需要 通过按 空格 翻页到最好, 在命令行中输入 I ACCEPT 来接受协议。 这样就会在 aosp 目录下面生成一个 vendor 目录。 这个里面就放置这和 pixel 6a 硬件对应的 设备驱动文件。
3.2 ubuntu
- https://source.android.com/docs/setup/start/initializing?hl=zh-cn
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
3.2 编译
source build/envsetup.sh
lunch <product_name>-<release>-<build_variant>
- product_name : aosp_oriole
- 在如下网址查询设备代号: https://source.android.com/docs/setup/reference/build-numbers?hl=zh-cn#build-targets
Pixel 6a | bluejay |
---|---|
Pixel 6 Pro | raven |
Pixel 6 | oriole |
-
release : ap4a
- 这个跟代码分支相关,我们在前面选择代码分支时提到的一个build ID中就是此处的值:
-
build_variant:
userdebug
所以我们最终的命令如下:
source build/envsetup.sh
lunch aosp_oriole-ap4a-userdebug
make -j 4
最终编译完的产物在aosp目录下的out文件夹中。
4. 烧录
4.1设备解锁bootloader
在我们刷入ROM之前,我们还需要对设备解锁bootloader。Pixel设备的解锁非常方便,我们可以参考官方文档Unlock the bootloader进行。在打开开发者选项连接上设备的基础上,我们需要在开发者选中中找到OEM解锁
这个选项并打开,然后执行如下命令:
# 重启到fastboot模式
adb reboot bootloader
# 解锁bootloader
fastboot flashing unlock
然后我们需要通过电源键和音量键确认解锁即可,然后重启设备。
4.2 刷入ROM
最终编译完成的刷机的ROM,在aosp/out/target/product/oriole
这个目录下。
刷入ROM也非常简单,我们只需要在ROM目录下执行如下命令即可。
# 重启到fastboot模式
adb reboot bootloader
# 刷入ROM
fastboot flashall -w
等待设备自动重启开机后,就可以看到我们编译的ROM了。但由于我们刷的是工程版本,所以实际使用起来会有一些卡。
5. 注意
在编译android aosp 时, 报了相关cache 的错误。
. ./build/envsetup.sh
lunch aosp_oriole-ap4a-userdebug
# 通过 CCACHE_DIR 环境变量重新指定cache 目录解决
export CCACHE_DIR=/home/leo/data_4t/cbx/android-15.0.0_r11/out/cache
参考文档
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/