動(dòng)手編譯一個(gè)你自己的Android系統(tǒng)!
BAT
作者張彬666:
https://www.jianshu.com/u/e94ea7ab2e19
先上圖,其他的文檔有些不是很全,我這個(gè)我只能說(shuō)我現(xiàn)在刷機(jī)成功了,有圖有真相。我買的Pixel 一代歐版手機(jī) 歐版 歐版 歐版,刷的 android-10.0.0_r5 分支。下圖請(qǐng)忽略相機(jī)名稱(這個(gè)我自己修改的)和WiFi圖標(biāo)顯示圖標(biāo)顯示問(wèn)題,那個(gè)刷官方的ROM包WiFi圖標(biāo)也那樣,但是可以正常上網(wǎng)。

硬件要求
電腦
內(nèi)存推薦16G,硬盤推薦150G以上,最好250G以上。我之前搞內(nèi)存4G的電腦編譯各種問(wèn)題換成16G一次成功,8G能不能編譯過(guò)我不知道。
協(xié)程能輕量到什么程度?就算你在一個(gè)線程中創(chuàng)建1000個(gè)協(xié)程,也不會(huì)有什么影響。
軟件要求
Ubuntu下載
Ubuntu系統(tǒng),谷歌建議的14.04坑太多,本人安裝的Ubuntu 20.04 LTS版的系統(tǒng)。Android源碼對(duì)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下載,它沒(méi)有直接支持JDK 8版本。
可以下載JDK8U45版本。
sudo apt-get update
cd Downloads 到下載目錄,Downloads為默認(rèn)目錄
sudo dpkg -i openjdk-8-jdk_8u45-b14-1_amd64.deb
解決缺少依賴項(xiàng)的問(wèn)題:sudo apt-get -f install
安裝的時(shí)候可能會(huì)出現(xiàn)找不到deb文件 有同學(xué)說(shuō)強(qiáng)制安裝,我沒(méi)試過(guò)。
sudo apt-get update
cd Downloads 到下載目錄
sudo dpkg -i --ignore-depends=libxml2-utils openjdk-8-jdk_8u45-b14-1_amd64.deb
解決缺少依賴項(xiàng)的問(wèn)題: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
下載代碼
下載 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 "[email protected]"
初始化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
分支情況和對(duì)應(yīng)手機(jī),只截取一部分,這個(gè)太多了。

下載并且輸出下載的日志
repo sync -j4 2>&1 | tee sync_log.txt
這里有時(shí)會(huì)掉線,建議寫一個(gè)shell腳本:
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
下載驅(qū)動(dòng)
下載驅(qū)動(dòng)(專有的二進(jìn)制文件),官網(wǎng)地址這個(gè)時(shí)候細(xì)分版本那欄就用到了,先找到Pixel手機(jī),搜索QP1A.191005.007.A1 有幾個(gè)下載幾個(gè)。

下載完成之后每個(gè)目錄里面有一個(gè)shell腳本,將兩個(gè)shell腳本放在Aosp 目錄下,chmod 777 XXX.sh 然后執(zhí)行 ./XXX.sh 先按一個(gè)回車,一直按回車只到出現(xiàn) I ACCEPT輸入這兩個(gè)單詞再回車,注意在第8條。
編譯 Android
關(guān)聯(lián)代碼
方法一:
source build/envsetup.sh
方法二:
. build/envsetup.sh
選擇手機(jī)型號(hào)
lunch aosp_sailfish-userdebug
只截取一部分,這個(gè)也不少。

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

在源碼根目錄(我的項(xiàng)目Aosp目錄下)執(zhí)行,這步必須下載SDK,手機(jī)已經(jīng)解鎖的跳過(guò)此步。
對(duì)于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備):
fastboot flashing unlock
對(duì)于老款設(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
FAQ
Question1:怎么重新關(guān)閉引導(dǎo)加載程序?
Answer1:我能問(wèn)一下為什么要關(guān)閉,你后期使用還得開。車跑偏了哈,回答問(wèn)題。
對(duì)于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備):
fastboot flashing lock
對(duì)于老款設(shè)備(2014 年及之前發(fā)布的設(shè)備):
fastboot oem lock
Question2:mac電腦配置有哪些問(wèn)題?
首先下載mac os 10.11sdk拷貝到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs,然后解壓。
推薦閱讀
? 耗時(shí)2年,Android進(jìn)階三部曲第三部《Android進(jìn)階指北》出版!
? 『BATcoder』做了多年安卓還沒(méi)編譯過(guò)源碼?一個(gè)視頻帶你玩轉(zhuǎn)!
BATcoder技術(shù)群,讓一部分人先進(jìn)大廠
大家好,我是劉望舒,騰訊云最具價(jià)值專家TVP,著有暢銷書《Android進(jìn)階之光》《Android進(jìn)階解密》《Android進(jìn)階指北》,蟬聯(lián)四屆電子工業(yè)出版社年度優(yōu)秀作者,谷歌開發(fā)者社區(qū)特邀講師,國(guó)內(nèi)首批Android開發(fā)者,百度百科收錄的技術(shù)專家。
前華為技術(shù)專家,現(xiàn)大廠技術(shù)負(fù)責(zé)人。
想要加入 BATcoder技術(shù)群,公號(hào)回復(fù)BAT 即可。
為了防止失聯(lián),歡迎關(guān)注我的小號(hào)
微信改了推送機(jī)制,真愛請(qǐng)星標(biāo)本公號(hào)??
