Mac編譯Android 10源碼(QW)

寫在前面

最近因?yàn)楣ぷ餍枰忠幾gAndroid源碼,看了官方文檔,又搜索了很多中文博客,發(fā)現(xiàn)一個問題:多數(shù)博主都是亦步亦趨的翻譯了Android官方介紹,新手如果按照這些博客去做往往做到一半會發(fā)現(xiàn)各種問題,影響效率。
希望能通過這篇博客幫助到更多的Android開發(fā)者(我希望能幫助到有腦子、看了博客能理清楚編譯源碼思路的開發(fā)者,而不是伸手黨)。有時間會補(bǔ)充每個環(huán)節(jié)的細(xì)節(jié)。
阿里校招開始了!歡迎同學(xué)們投遞簡歷,詳見文末二維碼!

事前準(zhǔn)備

我使用Mac pro + 移動硬盤 + Pixel 3XL編譯刷機(jī)

  • 操作系統(tǒng):Mac OS 10.14(或Linux),不推薦Windows,坑多
  • 存儲空間:120G(很多博客寫40/60G,大坑,完全不夠用),一定要設(shè)置為“Mac OS 擴(kuò)展(區(qū)分大小寫,日志式)”
  • 手機(jī):專門買了Pixel 3XL做測試設(shè)備,Pixel 2/3/3XL都有部分是v版,不支持解鎖,買之前一定要看清楚!不想浪費(fèi)錢用模擬器也行
  • 軟件:這里也是大坑,很多博客都在最后寫出現(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ì)寫了,注意一點(diǎn),提前配置好git config
    • Python:新版repo(新手先簡單理解repo=下載器)要使用Python3.6+,但Python3.6+在repo運(yùn)行過程中會強(qiáng)制校驗(yàn)SSL證書,所以可以在repo里加兩行代碼跳過校驗(yàn)
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

編譯

整個流程是這樣:初始化repo->下載源碼->下載驅(qū)動->編譯->刷機(jī)
這里要注意!很多博客會寫下載源碼后直接編譯,但如果不下載手機(jī)對應(yīng)的驅(qū)動,編譯出來的鏡像是不能刷機(jī)的,刷了容易變磚!
下載源碼前要看自己的手機(jī)是否支持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(進(jìn)入你的目標(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命令分別運(yùn)行兩個文件,完事

編譯

嫌麻煩直接按我的介紹敲命令行:

$ 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替換為你編譯的版本

刷機(jī)

如果用模擬器就不用往下看了,這里命令行直接敲“emulator”等模擬器啟動就好

  • 進(jìn)入開發(fā)者模式,打開“OEM 解鎖”開關(guān)
  • 進(jìn)入刷機(jī)模式,看這里:https://source.android.com/setup/build/running,命令行或物理組合鍵都能進(jìn)
  • 嫌麻煩直接按我的介紹敲命令行:
$ fastboot flashing unlock(或fastboot oem unlock,分別適用于新舊手機(jī))
$ fastboot flashall -w

正常到這里,你能看到手機(jī)自動重啟,然后進(jìn)入了一個Android 1.5一樣簡陋的頁面,只有WebView、Camera、Phone等十來個基礎(chǔ)應(yīng)用,恭喜,刷機(jī)成功!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容