AOSP 完整工作流程:從 repo init、repo sync 到燒錄進 Pixel 手機
本篇記錄從零開始下載 AOSP 原始碼、編譯,一路到用 fastboot 燒錄進 Pixel 8(代號 shiba)的完整流程,以及常見錯誤與救磚方法。
本機 Pixel 8(shiba)目前系統版本為 BP4A.251205.006,對應 Android 16 QPR2(2025 年 12 月 2 日釋出)。
Build ID 格式解析:B(Baklava=Android 16) P(Support Vertical) 4A(Branch) .251205(分支日期 2025/12/05) .006(patch 序號)
1. 環境準備
硬體需求
- 主機:Ubuntu 22.04 / 24.04 LTS(x86_64),建議 RAM ≥ 32 GB、硬碟空間 ≥ 300 GB
- 手機:Pixel 8(
shiba)或 Pixel 8 Pro(husky)
安裝系統套件
sudo apt-get update
sudo apt-get install -y \
git-core gnupg flex bison build-essential zip curl \
zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
安裝 repo 工具
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
建議將 export PATH=~/bin:$PATH 加到 ~/.bashrc 或 ~/.zshrc 中,避免每次重新設定。
安裝 ADB / fastboot
sudo apt install -y android-tools-adb android-tools-fastboot
# 確認版本
adb version
fastboot --version
2. 下載 AOSP 原始碼
建立工作目錄
mkdir -p ~/aosp && cd ~/aosp
repo init
以下指令使用 --partial-clone 加速下載,並指定 --no-use-superproject 避免部分機器上的網路問題:
repo init \
--partial-clone \
--no-use-superproject \
-b android-latest-release \
-u https://android.googlesource.com/platform/manifest
執行完會看到:
repo has been initialized in /home/alanhc/aosp
目錄結構會多出 .repo/:
.repo/
├── manifest.xml
├── manifests/
├── manifests.git/
└── repo/
針對 BP4A.251205.006(Android 16 QPR2):使用
android-latest-release即可(2026 年 4 月 AOSP 已推送此版本的原始碼)。若要精確 pin 住特定 tag,請至 source.android.com/docs/setup/reference/build-numbers 查詢BP4A.251205.006對應的android-16.0.0_r*tag,再改用:repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_rXX其中
XX為查表得到的號碼。Android 14 舊版範例(
ap1a.240305.019):repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r17
repo sync
repo sync -c -j8 2>&1 | tee -a repo_sync.log
-c:只 sync 目前 branch,節省空間-j8:8 個並行執行緒(建議不要用$(nproc)全開,容易遇到 fetch error)tee -a repo_sync.log:同時輸出到 log 檔方便事後查錯
完成後看到:
repo sync has finished successfully.
整個過程視網路狀況約需 30~90 分鐘。若中途遇到錯誤,可重跑指令,repo sync 支援斷點續傳。
AI 輔助除錯:sync 過程若遇到奇怪的 fetch error,可以貼 log 給 Gemini CLI 或 Claude 幫忙分析。
3. 下載 Vendor Proprietary Drivers
Google 的閉源驅動(Baseband、Vendor image 等)需另外從官方下載,放進 AOSP 目錄才能成功編譯 Pixel 版本。
前往:
**https://developers.google.com/android/drivers**(正式版,依裝置 + Build ID 查詢)
針對 BP4A.251205.006(Android 16 QPR2),在該頁面搜尋 shiba + BP4A.251205.006,取得對應的下載連結(URL 格式如下),SHA-256 以頁面上的為準:
cd ~/aosp
# 將下方 URL 的 <HASH> 換成頁面上標示的實際 checksum 前段
wget https://dl.google.com/dl/android/aosp/google_devices-shiba-bp4a.251205.006-<HASH>.tgz
tar -xzf google_devices-shiba-bp4a.251205.006-*.tgz
# 執行解壓腳本(需同意授權協議,輸入 'I ACCEPT' 即可)
./extract-google_devices-shiba.sh
Android 14 AP1A 舊版範例(僅供參考,請務必下載與自己 Build ID 相符的版本):
wget https://dl.google.com/dl/android/aosp/google_devices-shiba-uq1a.231205.015-9a0b48c0.tgz
成功後會在 vendor/google_devices/shiba/ 產出以下內容:
vendor/google_devices/shiba/proprietary/
├── bootloader.img
├── radio.img
├── vendor.img
├── vendor_dlkm.img
├── vbmeta_vendor.img
├── device-vendor.mk
├── Android.bp / Android.mk
└── ...(其他 .so 與 .apk)
4. 設定 Build 環境與選擇目標
cd ~/aosp
source build/envsetup.sh
接著執行 lunch 選擇編譯目標。對 Pixel 8(shiba)使用 userdebug variant:
lunch aosp_shiba-trunk_staging-userdebug
成功後會輸出當前 build 設定(Android 16 版本範例):
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=16
TARGET_PRODUCT=aosp_shiba
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=arm64
HOST_OS=linux
BUILD_ID=BP4A.251205.006
OUT_DIR=out
============================================
Pixel 8 Pro(husky) 的 lunch target 為
aosp_husky-trunk_staging-userdebug。
16 KB page size 支援(Android 16 新功能):Pixel 8 亦可選擇aosp_shiba_pgagnostic-trunk_staging-userdebug,但一般開發用aosp_shiba-trunk_staging-userdebug即可。
5. 編譯
m
m 等同 make,會自動偵測 CPU 核心數。首次編譯視硬體需要 1~3 小時:
#### build completed successfully (01:03:22 (hh:mm:ss)) ####
編譯產物位於:
echo $PRODUCT_OUT
# out/target/product/shiba
6. 連接 Pixel 手機(ADB 設定)
手機端設定
- 設定 → 關於手機 → 連點「版本號」7 下,開啟開發人員選項
- 開發人員選項 → 打開「USB 偵錯」
- 開發人員選項 → 打開「OEM 解鎖」(第一次燒錄 AOSP 必須)
- 用 USB 線接到電腦,手機跳出授權視窗選「允許」
主機端確認連線
adb devices
# List of devices attached
# 38011FDJH00C9F device
狀態是 device 代表連線成功;unauthorized 代表手機還沒授權,點選手機的允許即可。
常見問題:unauthorized 無法解決
# 清除舊有金鑰並重啟 daemon
rm -f ~/.android/adbkey ~/.android/adbkey.pub
adb kill-server
adb start-server
adb devices
7. 進入 Bootloader 並燒錄
進入 fastboot 模式
adb reboot bootloader
手機螢幕會進入黑底的 fastboot 介面。確認 fastboot 有看到裝置:
fastboot devices
# 38011FDJH00C9F fastboot
解鎖 Bootloader(第一次必做,會清除資料)
fastboot flashing unlock
手機螢幕會出現確認畫面,用音量鍵選「Unlock the bootloader」後按電源鍵確認。
燒錄所有分區
cd ~/aosp
source build/envsetup.sh
lunch aosp_shiba-trunk_staging-userdebug # 或你選的 target
cd "$(get_build_var PRODUCT_OUT)"
fastboot flashall -w
-w 代表同時清除 userdata(相當於恢復出廠設定)。完整輸出範例:
--------------------------------------------
Bootloader Version...: ripcurrent-16.4-14097582
Baseband Version.....: g5300i-250909-251024-B-14326967
Serial Number........: 38011FDJH00C9F
--------------------------------------------
Checking 'product' OKAY [ 0.000s]
Setting current slot to 'a' OKAY [ 0.074s]
Sending 'boot_a' (65536 KB) OKAY [ 1.596s]
Writing 'boot_a' OKAY [ 0.099s]
...(中間略)
Sending sparse 'super' 9/9 (211236 KB) OKAY [ 5.163s]
Writing 'super' OKAY [ 0.333s]
Rebooting OKAY [ 0.000s]
Finished. Total time: 65.786s
燒錄完成後手機會自動重開機,進入剛才編譯的 AOSP 系統。
8. 常見錯誤排解
錯誤:image (bl1_a): rejected, anti-rollback
(bootloader) image (bl1_a): rejected, anti-rollback
FAILED (remote: 'failed to flash partition (bootloader_a): -7')
原因:試圖刷入比目前 bootloader 版本更舊的 bootloader,反回滾機制擋下。
解法:下載與目前 bootloader 版本相符(或更新)的官方 factory image 來刷。
錯誤:Device version-bootloader is X. Update requires Y.
Device version-bootloader is 'ripcurrent-16.4-14097582'.
Update requires 'ripcurrent-14.4-11322024'.
fastboot: error: requirements not met!
原因:factory image 的版本比目前 bootloader 舊。
解法:到 https://developers.google.com/android/images 下載最新版或與目前 bootloader 版本相符的 factory image。
燒錄後無法開機(變磚)
按住 電源 + 音量下鍵 強制進入 fastboot,然後用官方 factory image 救回:
# 1. 到 https://developers.google.com/android/images 下載對應機型的 factory image
# 2. 解壓縮
cd ~/shiba-bp4a.260205.001
# 3. 執行官方燒錄腳本
./flash-all.sh
成功輸出的最後幾行:
Rebooting OKAY [ 0.000s]
Finished. Total time: 189.060s
這樣就救回來了。
9. 重新 sync 並重新燒錄的快速流程
之後要更新 AOSP 並重燒,只需:
# 1. 更新原始碼
cd ~/aosp
repo sync -c -j8 2>&1 | tee repo_sync.log
# 2. 重新編譯
source build/envsetup.sh
lunch aosp_shiba-trunk_staging-userdebug
m
# 3. 燒錄
adb reboot bootloader
cd "$(get_build_var PRODUCT_OUT)"
fastboot flashall -w
10. 補充:停用 AVB 並以 R/W 模式 Remount
如果需要修改系統分區(例如推 .so 到 /system),需要先停用 AVB:
fastboot -w --disable-verity --disable-verification flashall
燒錄完畢後,在 adb shell 中 remount:
adb root
adb remount
參考資料
- AOSP 官方建置指南
- AOSP Build Numbers & Tags 對照表(查 BP4A.251205.006 對應的
android-16.0.0_rXXtag) - Google Pixel Factory Images
- Google Pixel Vendor Drivers(下載 shiba + BP4A.251205.006 的 proprietary blobs)
- Android 16 QPR2 Factory Images
- LineageOS Pixel 8 Build Guide