首先必須知道,官方釋出的手機的開機載入程序 (Bootloader) 會阻止你刷入任何客製 ROM。
所以所謂「解鎖」就是解鎖 Bootloader,讓它允許你可以進行刷機動作。
其次要注意是在刷機後,所有使用者資料 (User data) 都會消失,所以刷機前要先備份重要資料。
網路上有很多教解鎖 Pixel 手機的文章,都可以參考,
實際上在Android官網已經有教導你如何解鎖 Pixel XL 的 Bootloader,
我個人是比較習慣直接看官網來做:
https://source.android.com/setup/build/running
如果你懶得看一大堆英文,根據官網的描述,
以下的命令就可以讓你解鎖 Bootloader。
進入 Bootloader
 $ adb reboot bootloader
或是你可以直接長壓著 Volume Down + Power 按鍵
等重開機後會看到一個躺著且肚子打開的機器人
安裝 fastboot
 $ sudo apt-get install fastboot
解鎖 Bootloader
 $ fastboot flashing unlock
按下 Volume Up 選擇 YES 後
機器人下面的描述就會變成 Device is UNLOCKED
作業系統:Ubuntu 16.04 LTS
先把舊的 JDK 版本移除 (但其實可用可不用, 我個人是都留著, 只要設定選哪一個即可)
 $ sudo apt-get purge openjdk-* icedtea-* icedtea6-*
安裝 AOSP Pie 9.0 所需的 open-8-jdk 環境
 $ sudo apt-get update
 $ sudo apt-get install openjdk-8-jdk
 $ sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip liblz4-tool libncurses5 libssl-dev bc
確認版本
 $ java -version
 java version "1.8.0_91"
 OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-0ubuntu4~14.04-b14)
 OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
因為 Android 開源碼的每個資料夾是由許多 Git 倉庫組成的,
而要一次管理 400 多個 Git 倉庫,
你需要下載 Google 官方提供的工具:repo
安裝 repo 工具
 $ mkdir ~/bin
 $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
 $ chmod a+x ~/bin/repo
設定 repo
 $ sudo nano ~/.bashrc
 // 加入下列環境參數
 export PATH=~/bin:$PATH
重新讀取設定檔
 $ source ~/.bashrc
security revision: August 2019
build: PQ3A.190801.002
branch: android-9.0.0_r46
更多資訊可以參考 Android Codenames, Tags, and Build Numbers.
創建一個資料夾 (名稱自取) 及設定下載的版本 (例:android-9.0.0_r46)
 $ mkdir ~/android-9.0.0_r46
 $ cd ~/android-9.0.0_r46
 $ repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r46
注意:下載的檔案大約需 20 GB, 編譯成功的話又需 100 GB 的空餘硬碟空間. 所以請先選好硬碟位置.
開始下載
 $ repo sync -j8
注意:大約要跑個2小時以上跑不掉, 視個人PC差異
選擇自己的 device 名稱設定檔
 $ source build/envsetup.sh && lunch
備註:例如 Pixel XL 就選 45 (aosp_marlin-userdebug)
所以如果你的硬體是**Pixel 3**,則命令就是 lunch aosp_blueline-userdebug

開始編譯
 $ make –j8
燒錄 image
一切順利後完成編譯,輸出目錄在環境變數$ANDROID_PRODUCT_OUT所指定的位置。
你可以直接下指令到輸入目錄。
再來檢視你編譯出來的結果:
 $ ll $ANDROID_PRODUCT_OUT/*.img
 -rw-rw-r-- 1 franklin franklin   31880488  9月  3 18:01 boot.img
 -rw-rw-r-- 1 franklin franklin    1636762  9月  3 18:01 ramdisk.img
 -rw-rw-r-- 1 franklin franklin   10747881  9月  3 18:01 ramdisk-recovery.img
 -rw-rw-r-- 1 franklin franklin 1065332992  9月  3 18:14 system.img
 -rw-rw-r-- 1 franklin franklin   76312832  9月  3 18:14 system_other.img
 -rw-rw-r-- 1 franklin franklin    3289548  9月  3 17:49 userdata.img
 -rw-r--r-- 1 franklin franklin  273522824  9月  3 16:23 vendor.img
再次進入 Bootloader 模式執行燒錄
 $ adb reboot bootloader
或是你可以直接 長壓著 Volume Down + Power 按鍵
等重開機後會看到一個躺著且肚子打開的機器人
 $ fastboot flashall -w
若你想保留使用者資料, 可以不加上 -w 選項
SONY - Developer World - build AOSP Pie 9.0 :
Google APIs for Android :
https://developers.google.com/android/drivers#marlin
https://developers.google.com/android/images#marlin
Android Developer - Flashing devices
https://source.android.com/setup/build/running