寫在前面
最近因為工作需要又要編譯Android源碼,看了官方文檔,又搜索了很多中文博客廷区,發(fā)現(xiàn)一個問題:多數(shù)博主都是亦步亦趨的翻譯了Android官方介紹买窟,新手如果按照這些博客去做往往做到一半會發(fā)現(xiàn)各種問題丰泊,影響效率。
希望能通過這篇博客幫助到更多的Android開發(fā)者(我希望能幫助到有腦子蔑祟、看了博客能理清楚編譯源碼思路的開發(fā)者趁耗,而不是伸手黨)。有時間會補充每個環(huán)節(jié)的細(xì)節(jié)疆虚。
阿里校招開始了!歡迎同學(xué)們投遞簡歷满葛,詳見文末二維碼径簿!
事前準(zhǔn)備
我使用Mac pro + 移動硬盤 + Pixel 3XL編譯刷機
- 操作系統(tǒng):Mac OS 10.14(或Linux),不推薦Windows嘀韧,坑多
- 存儲空間:120G(很多博客寫40/60G篇亭,大坑,完全不夠用)锄贷,一定要設(shè)置為“Mac OS 擴展(區(qū)分大小寫译蒂,日志式)”
- 手機:專門買了Pixel 3XL做測試設(shè)備,Pixel 2/3/3XL都有部分是v版谊却,不支持解鎖柔昼,買之前一定要看清楚!不想浪費錢用模擬器也行
- 軟件:這里也是大坑炎辨,很多博客都在最后寫出現(xiàn)xxx error捕透,是要更新xxx
- vpn:大家都懂,有了梯子方便很多碴萧,沒有也行乙嘀,下載源碼或其他軟件時選擇國內(nèi)鏡像
- platform-tools:第一次用24編譯出錯,改成29就好了
- Java:我用Java 8破喻,編譯過程沒報錯
- Xcode:我的是9.4.1虎谢,編譯沒報錯
- Homebrew、GnuPG曹质、Gerrit婴噩、環(huán)境變量等的錯誤提示都很明顯,隨便Google/百度都有答案咆繁,不細(xì)寫了讳推,注意一點,提前配置好git config
- Python:新版repo(新手先簡單理解repo=下載器)要使用Python3.6+玩般,但Python3.6+在repo運行過程中會強制校驗SSL證書银觅,所以可以在repo里加兩行代碼跳過校驗
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
編譯
整個流程是這樣:初始化repo->下載源碼->下載驅(qū)動->編譯->刷機
這里要注意!很多博客會寫下載源碼后直接編譯坏为,但如果不下載手機對應(yīng)的驅(qū)動究驴,編譯出來的鏡像是不能刷機的镊绪,刷了容易變磚!
下載源碼前要看自己的手機是否支持Android高版本洒忧!拿著Nexus 3是刷不了Android 10的蝴韭!在這里查:https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
敲黑板:如果英語過關(guān),一定要官網(wǎng)的英文文檔熙侍,有些文檔中文版更新不及時榄鉴,非常誤事!比如最新的源碼版本介紹蛉抓,中文版比英文版的更新晚整一個月庆尘!
初始化repo,下載源碼
看官方文檔:https://source.android.com/setup/build/downloading
嫌麻煩直接按我的介紹敲命令行:
$ cd
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir WORKING_DIRECTORY(替換為你的目標(biāo)源碼目錄)
$ cd WORKING_DIRECTORY(進入你的目標(biāo)源碼目錄)
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r30
$ repo sync(開始下載巷送,幾十個G驶忌,我下了4個小時)
下載驅(qū)動
看這里:https://developers.google.com/android/drivers,如果不是Nexus/Pixel就自己找原廠資源吧
下完兩個zip包笑跛,解壓出來2個sh文件付魔,放在你的源碼目錄下(就是上一步的WORKING_DIRECTORY),使用sh命令分別運行兩個文件飞蹂,完事
編譯
嫌麻煩直接按我的介紹敲命令行:
$ make clobber(清空之前的編譯產(chǎn)物)
$ source build/envsetup.sh
$ lunch
$ 15(這里要對應(yīng)你的測試收集几苍,比如我用Pixel 3XL,這里就敲“15”晤柄,具體看這里:https://source.android.com/setup/build/running#selecting-device-build)
$ make -j8(邪惡..8代表并行8個編譯任務(wù)擦剑,一般選CPU核數(shù)*2,我用Mac pro編了7個小時)
這里有個坑芥颈,要配置環(huán)境變量惠勒,保證“echo $ANDROID_PRODUCT_OUT”輸出的結(jié)果是:WORKING_DIRECTORY/out/target/product/crosshatch,crosshatch替換為你編譯的版本
刷機
如果用模擬器就不用往下看了爬坑,這里命令行直接敲“emulator”等模擬器啟動就好
- 進入開發(fā)者模式纠屋,打開“OEM 解鎖”開關(guān)
- 進入刷機模式,看這里:https://source.android.com/setup/build/running盾计,命令行或物理組合鍵都能進
- 嫌麻煩直接按我的介紹敲命令行:
$ fastboot flashing unlock(或fastboot oem unlock售担,分別適用于新舊手機)
$ fastboot flashall -w
完
正常到這里,你能看到手機自動重啟署辉,然后進入了一個Android 1.5一樣簡陋的頁面族铆,只有WebView、Camera哭尝、Phone等十來個基礎(chǔ)應(yīng)用哥攘,恭喜,刷機成功!