Pixel 6 从源码到镜像:一站式构建Android 15实战指南

1. 环境准备:为Pixel 6编译Android 15打好基础

编译Android源码就像盖房子,地基没打好后面全是坑。我去年用一台老笔记本折腾AOSP编译,结果卡在内存不足报错整整三天。这次给Pixel 6编译Android 15,咱们先把硬件软件环境配置到位。

硬件方面,官方建议400GB空间起步,但我实测下来:

  • 源码目录精简后约120GB
  • 编译输出目录约180GB
  • 建议直接准备500GB SSD(机械硬盘编译速度会哭)
  • 内存64GB是甜点配置,32GB也能跑但频繁触发swap

软件环境推荐Ubuntu 22.04 LTS,这几个依赖包容易漏装:

sudo apt-get install -y git-core gnupg flex bison build-essential \ zip curl zlib1g-dev libc6-dev-i386 libncurses5-dev \ x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev \ libxml2-utils xsltproc unzip fontconfig python3-venv

特别提醒:遇到libncurses相关报错时,大概率是漏装了libncurses5-dev。有次我编译到一半突然报终端控制错误,就是这个包没装。

2. 源码下载:国内镜像加速实战技巧

官方源码仓库在国外,直连下载速度可能只有50KB/s。这里分享我的清华镜像站加速方案:

第一步配置repo工具

mkdir -p ~/bin curl -L https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo chmod a+x ~/bin/repo

记得把~/bin加入PATH:

echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc source ~/.bashrc

第二步初始化仓库时,关键参数组合:

  • --depth=1只拉取最新代码
  • -c只同步当前分支
  • --no-tags不拉取标签
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest \ -b android-15.0.0_r32 --depth=1

同步代码时用这个组合拳:

repo sync -c -f --no-tags --no-clone-bundle -j4

实测在百兆带宽下,完整同步时间从36小时缩短到3小时。如果中途断网,重新执行repo sync会自动续传。

3. 驱动集成:Pixel 6专属二进制处理

Pixel设备需要额外下载硬件驱动,这个环节最容易翻车。去年编译Android 14时,我因为驱动版本不匹配导致WIFI无法启用。

精准匹配驱动版本

  1. 在Google驱动页面找到对应Build ID(BP1A.250505.005)
  2. 下载两个文件:
    • 高通专用驱动:google_devices-oriole-xxxx.tgz
    • 通用系统驱动:qcom-oriole-xxxx.tgz

解压后执行脚本时要注意:

tar zxvf google_devices-oriole-bp1a.250505.005-adb53d50.tgz ./extract-google_devices-oriole.sh # 看到许可协议时必须输入"I ACCEPT"(包括引号)

验证驱动是否安装成功:

ls -l vendor/google_devices/oriole/

应该能看到proprietary目录和BoardConfigVendor.mk文件。

4. 编译系统:新版Lunch机制深度解析

Android 15的编译系统有个大变化 - Lunch命令从两段式变成了三段式格式。我第一次编译时在这里卡了俩小时。

新版编译流程

source build/envsetup.sh lunch aosp_oriole-bp1a-userdebug

如果遇到菜单不显示的问题,需要手动设置环境变量:

export TARGET_PRODUCT=aosp_oriole export TARGET_BUILD_VARIANT=userdebug export TARGET_RELEASE=bp1a

编译优化技巧

  • 使用ccache加速后续编译:
    export USE_CCACHE=1 ccache -M 50G
  • 多线程编译建议:
    make -j$(($(nproc)-1)) # 留一个核心给系统

遇到Out of memory错误时,可以尝试:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" ./prebuilts/sdk/tools/jack-admin kill-server ./prebuilts/sdk/tools/jack-admin start-server

5. 烧录实战:Pixel 6刷机避坑指南

刷机环节最怕变砖,这几个关键步骤必须严格操作:

第一步解锁Bootloader

adb reboot bootloader fastboot flashing unlock

手机屏幕会显示确认提示,用音量键选择"Unlock"。

刷入系统镜像前建议:

  1. 备份重要数据(-w参数会清空数据)
  2. 检查镜像完整性:
    fastboot getvar all 2>&1 | grep product
    应该显示product: oriole

正式刷机命令

fastboot flashall -w --skip-reboot

刷完后建议手动清除缓存分区:

fastboot erase cache fastboot reboot

第一次开机可能耗时10-15分钟,这是正常现象。如果卡在Google LOGO超过20分钟,可以尝试:

fastboot format userdata fastboot format cache

6. 常见问题排查手册

Q1:编译时报错ninja failed with: exit status 137

  • 这是典型的内存不足错误
  • 解决方案:减少编译线程数make -j4或增加swap空间

Q2:adb devices找不到设备

  • 检查USB调试是否开启
  • 更新USB驱动:
    sudo apt install android-sdk-platform-tools-common sudo usermod -aG plugdev $LOGNAME

Q3:WIFI/蓝牙无法使用

  • 确认驱动版本完全匹配
  • 检查vendor镜像是否正常刷入:
    adb shell ls /vendor/firmware

Q4:系统卡在开机动画

  • 尝试清除avb密钥:
    fastboot erase avb_custom_key
  • 或者刷入原始boot镜像:
    fastboot flash boot boot.img

记得每次重新编译前执行:

make clobber # 彻底清理上次编译结果 rm -rf out/ # 确保全新构建