來點(diǎn)前奏說明
當(dāng)你打開這個(gè)文檔的時(shí)候,你已經(jīng)做好準(zhǔn)備了,話不多說開搞。
這里參考 Google官網(wǎng)文檔 和 清華鏡像文檔
先上圖,其他的文檔有些不是很全,我這個(gè)我只能說我現(xiàn)在刷機(jī)成功了,有圖有真相。我買的Pixel 一代歐版手機(jī) 歐版 歐版 歐版,刷的 android-10.0.0_r5 分支。下圖請忽略相機(jī)名稱(這個(gè)我自己修改的)和WiFi圖標(biāo)顯示圖標(biāo)顯示問題,那個(gè)刷官方的ROM包WiFi圖標(biāo)也那樣,但是可以正常上網(wǎng)。

1、硬件要求:
電腦 內(nèi)存推薦16G,硬盤推薦150G以上,最好250G以上
我之前搞內(nèi)存4G的電腦編譯各種問題換成16G一次成功,8G能不能編譯過我不知道。
2、軟件要求:
Ubuntu下載
Ubuntu系統(tǒng),谷歌建議的14.04坑太多,本人安裝的Ubuntu 20.04 LTS版的系統(tǒng)
Ubuntu下載
Android源碼對Ubuntu版本是有要求的,6.0版本最低要求14.04版本,默認(rèn)網(wǎng)址下載就是LTS版本,個(gè)人推薦安裝15.04以上
JDK下載
15.04版本及以上的JDK下載
sudo apt-get update
sudo apt-get install openjdk-8-jdk
14.04 版本的JDK下載,它沒有直接支持JDK 8版本
谷歌官網(wǎng)步驟
sudo apt-get update
cd Downloads 到下載目錄,Downloads為默認(rèn)目錄
sudo dpkg -i openjdk-8-jdk_8u45-b14-1_amd64.deb
解決缺少依賴項(xiàng)的問題: sudo apt-get -f install
安裝的時(shí)候可能會(huì)出現(xiàn)找不到deb文件 有同學(xué)說強(qiáng)制安裝,我沒試過
sudo apt-get update
cd Downloads 到下載目錄
sudo dpkg -i --ignore-depends=libxml2-utils openjdk-8-jdk_8u45-b14-1_amd64.deb
解決缺少依賴項(xiàng)的問題: sudo apt-get -f install
工具下載
sudo apt install git
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
sudo apt-get install python-dev
sudo apt install adb
3、下載代碼:
下載 repo 工具
清華鏡像步驟
mkdir ~/bin
PATH=~/bin:$PATH
curl https://aosp.tuna.tsinghua.edu.cn/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
谷歌步驟
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
初始化名稱和郵箱
mkdir Aosp (名稱隨意,我這里叫Aosp)
cd Aosp
git config --global user.name "bin zhang"
git config --global user.email "you@example.com"
初始化repo
鏡像的(默認(rèn)下載master分支,后期也可以切換再下載)
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
或者
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r5
谷歌的(默認(rèn)下載master分支,后期也可以切換再下載)
repo init -u https://android.googlesource.com/platform/manifest
或者
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r5
分支情況和對應(yīng)手機(jī),只截取一部分,這個(gè)太多了。
分支對應(yīng)機(jī)型

下載并且輸出下載的日志
repo sync -j4 2>&1 | tee sync_log.txt
這里推薦會(huì)掉線,建議寫一個(gè)shell腳本 具體請參考github的repo_sync.sh
fn_repo_sync()
{
repo sync -j8 2>&1 | tee sync_log.txt
}
fn_get_source_code()
{
echo "fn_get_source_code:$(pwd)"
fn_repo_sync
FETCH_ERROR=`grep -i "error: Exited sync" -A 1 sync_log.txt`
echo "${FETCH_ERROR}"
while [ -n "${FETCH_ERROR}" ]
do
echo "需要重新拉取代碼"
fn_repo_sync
FETCH_ERROR=`grep -i "error: Exited sync" -A 1 sync_log.txt`
done
echo "leave begin download source"
#repo start ${DATE_TIME} --all
}
fn_get_source_code
4、下載驅(qū)動(dòng):
下載驅(qū)動(dòng)(專有的二進(jìn)制文件),官網(wǎng)地址這個(gè)時(shí)候細(xì)分版本那欄就用到了,先找到Pixel手機(jī),搜索QP1A.191005.007.A1 有幾個(gè)下載幾個(gè)
QP1A.191005.007.A1 .png
下載完成之后每個(gè)目錄里面有一個(gè)shell腳本,將兩個(gè)shell腳本放在Aosp 目錄下,chmod 777 XXX.sh 然后執(zhí)行 ./XXX.sh 先按一個(gè)回車,一直按回車只到出現(xiàn) I ACCEPT輸入這兩個(gè)單詞再回車,注意在第8條左右
。
5、編譯 Android:
關(guān)聯(lián)代碼:
方法一:
source build/envsetup.sh
方法二:
. build/envsetup.sh
選擇手機(jī)型號:
lunch aosp_sailfish-userdebug
只截取一部分,這個(gè)也不少

編譯并且輸出日志
make -j4 2>&1 | tee build.log (電腦內(nèi)存高的可以16或者32,我用的16)
6、刷機(jī):
打開OEM開關(guān):
先點(diǎn)擊設(shè)置---關(guān)于手機(jī)----版本號七次---開發(fā)者選項(xiàng)---打開OEM解鎖(這步必須可以上網(wǎng),否則打不開)
進(jìn)入bootloader頁面(使用方法1必須安裝adb) platform-tools下載地址
我也下載好了 具體請參考github
方法1:
adb reboot bootloader
方法2:
使用下圖的快捷鍵,我的手機(jī) Pixel 就是音量減鍵和電源鍵
下圖只貼了一部分手機(jī)機(jī)型

在源碼根目錄(我的項(xiàng)目Aosp目錄下)執(zhí)行,這步必須下載SDK,手機(jī)已經(jīng)解鎖的跳過此步
對于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備)
fastboot flashing unlock
對于老款設(shè)備(2014 年及之前發(fā)布的設(shè)備)
fastboot oem unlock
配置adb和fastboot
su root
vim ~/.bashrc
export ADB=/home/zhangbin/Android/Sdk/platform-tools
export PATH=$ADB:$PATH
:wq 保存退出
source ~/.bashrc
adb version 確認(rèn)配置的目錄和顯示的一致
fastboot --version
配置生成的out目錄,刷機(jī)
export ANDROID_PRODUCT_OUT=/home/zhangbin/Aosp/out/target/product/sailfish
cd Aosp/out/target/product/sailfish
fastboot flashall -w
切換分支
清華鏡像
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r5
repo sync
谷歌
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r5
repo sync
FAQ
Question1:怎么重新關(guān)閉引導(dǎo)加載程序?
Answer1:我能問一下為什么要關(guān)閉,你后期使用還得開。車跑偏了哈,回答問題。
對于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備)
fastboot flashing lock
對于老款設(shè)備(2014 年及之前發(fā)布的設(shè)備)
fastboot oem lock
Question2:mac電腦配置有哪些問題?
Answer1:
首先下載mac os 10.11sdk
拷貝到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
然后解壓
