前文主要講解了 Android 編譯環境的搭建,接下來咱們正式開始 Android 源代碼的編譯,主要涉及兩部份內容:源代碼的下載和源代碼編譯。html
1、Android源代碼下載android
1) 配置 Git 信息git
將本身的姓名和郵箱信息配置到 Git 中,若是要使用 Gerrit 代碼審查工具,郵箱必須是 Google 帳號。[1]api
$ git config --global user.name "你的姓名" $ git config --global user.email "你的郵箱"
2) 安裝 Repobash
Android 源代碼很是龐大,經過 Git 版本管理工具分紅了 art、bionic、dalvik、frameworks 等多個代碼倉庫,若是分別使用 Git 逐個獲取代碼顯示很麻煩,而 Repo 就是一個用來統一管理這些代碼倉庫的 Python 腳本工具,經過它能夠很方便地同步 Android 源代碼。服務器
使用 curl 工具下載 Repo 腳本文件並更改運行權限架構
$ mkdir ~/bin $ PATH=~/bin:$PATH[2] $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
3) 建立源代碼存放目錄curl
建立 Android 源代碼存放目錄,若是是在 Mac 操做系統上,該目錄須要大小寫敏感的文件系統中建立,請參考前文講解的建立大小寫敏感的磁盤映像一節內容。ionic
$ mkdir mydroid $ cd mydroid
4) 初始化 Repo 工做目錄工具
執行如下命令下載最新 Android 源代碼的 manifest 信息,默認下載的是 master 分支,若是要下載其它分支的信息,須要指定 -b 參數,如下命令所示是下載最新的 android-7.1.1_r6分支[3]。初始化完成後即在當前目錄自動建立 .repo 目錄,裏面已經包含全部必需的信息。
$ repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.1_r6
5) 最後執行如下命令便可開始下載 Android 的源代碼
$ repo sync
Android 的整個源代碼超過 50G,下載過程很是漫長。另外,因爲國人都知道的緣由,以上過程必須配置代理服務器。
2、Android源代碼編譯
Android 源代碼下載完成後,便可開始編譯。若是須要移植,則須要進行不少設置和修改。但若是隻是搭建一個模擬環境,編譯時,只需保持默認設置便可。進入 Android 源代碼所在的目錄,按照如下的步驟便可開始編譯。
1) 初始化編譯環境
$ source build/envsetup.sh
或者將 source 用 . 代替也能夠
$ . build/envsetup.sh
2) 選擇目標配置
編譯配置的類型說明以下:
類型 | 目的 |
---|---|
user | 生產版本,具備有限的訪問權限 |
userdebug | 調試版本,和生產版本相似,但具備 root 權限和可調試性 |
eng | 開發版本,帶有額外的調試工具 |
市面大多數手機都採用 arm 架構,若是但願編譯後的 img 文件能夠刷到手機上,須要使用帶 arm 標識的配置,以下
$ lunch aosp_arm-eng
筆者後續將講解如何用模擬器加載編譯生成的 img 文件,並使用 HAX(Intel Hardware Accelerated Execution)[4]加速模擬器運行,因此此處使用 x86的配置
lunch aosp_x86_64-eng
3) 開始編譯
直接執行 make 命令便可開始編譯,make 命令後面的 -jN 表示啓用多少個並行任務同時進行編譯
$ make -j4
在筆者的編譯環境下,編譯結果以下圖所示。
第一次完整編譯會很是耗時,筆者使用的是 Mac 系統、i7的CPU、8G的內存、固態硬盤,但仍然用了3個多小時。後續若是對源代碼作一些修改,由於使用了前面的一些編譯結果,再次編譯的時間就不會這麼長。若是要確保修改的結果會被編譯進去,可使用如下命令將前面的編譯結果所有清除,但再次編譯又須要經歷漫長的等待。
$ make clobber
Android 源代碼編譯的產物中最重要的是三個鏡像文件,它們都位於 /out/target/product/<product_name>/ 目錄下,分別是:
[1] Git 的配置信息可在 ~/.gitconfig 文件中看到。
[2] 此處設置只對當前的終端窗口有效,如想長期有效,在 Mac 系統上需在 ~/.bash_profile 中設置,而 Ubuntu 系統則需在 ~/.bashrc 中設置。
[3] Android 源代碼的標籤和分支信息可在如下網址查看:http://source.android.com/source/build-numbers.html#source-code-tags-and-builds
[4] Intel 公司開發的一種硬件輔助虛擬化引擎技術,能夠縮短 Android 模擬器的啓動時間,筆者新試使用前和使用後的啓動時間大概從5分鐘縮短到30秒,效果很是明顯。