Mac 下 Android 源碼編譯從零開始:Day One--環境搭建,下載源碼html
參考官網連接(源碼下載):source.android.com/source/init…android
總連接(AOSP setup):source.android.google.cn/setup/git
本教程做爲記錄所用,因爲半途而廢過好幾回,本次會認真記錄下每個步驟和遇到的坑,當作給本身一個交代。shell
一、一週內,搭建好環境,並編譯成功:from 2019.5.7 到 2019.5.14。 2019.5.7 - 2019.5.8 完成搭建、下載源碼 二、掌握對源碼進行斷點調試。api
三、根據參考書《Android 開發藝術》和《Android 進階解密》,對 framework 層進行掃盲。四大組件爲重點,其餘只作涉獵。xcode
執行期限:2019.5.7-2019.6.7 一個月時間bash
本目標目測過於樂觀,先試行1周,看進度和時間投入如何,再定詳細目標。服務器
To do : 此處列出很多於五個階段和執行期限。網絡
·curl
·
·
編譯要求:須要區分大小寫的文件系統中對 AOSP 源文件進行操做。避免 Git 命令出現異常。
經過 shell 使用如下命令建立磁盤映像:
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 110g ~/android.dmg
複製代碼
坑點:8.0源碼下載下來就60G,編譯以後會更大,網上查不到確切的容量下限,此處設置爲110G,以知足編譯容量需求。不然可能遇到編譯失敗,若是把分區卸載了從新加載再編譯,會重頭開始編譯,意味着你可能又須要60G 以上的空間,因此編譯存儲空間預留大一點。
這將建立一個 .dmg文件,該文件在裝載後可用做具備 Android 開發所需格式的存儲卷。
若是您之後須要更大的存儲卷,還可使用如下命令來調整稀疏映像的大小:
hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
複製代碼
對於存儲在主目錄下的名爲 android.dmg 的磁盤映像,您能夠向 ~/.bash_profile 中添加輔助函數:
要在執行 mountAndroid 時裝載磁盤映像,請運行如下命令:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
複製代碼
注意:若是系統建立的是 .dmg.sparseimage 文件,請將 ~/android.dmg 替換成 ~/android.dmg.sparseimage。
要在執行 umountAndroid 時卸載磁盤映像,請運行如下命令:
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
複製代碼
裝載 android 存儲卷後,您將在其中開展全部工做。您能夠像對待外接式存儲盤同樣將其彈出(卸載)。
要查看在開發各類 Android 版本時要使用的 Java 版本,請參閱相關要求。
安裝所需的程序包 使用如下命令安裝 Xcode 命令行工具:
xcode-select --install
經過 macports.org 安裝 MacPorts。
注意:請確保在路徑中 /opt/local/bin 顯示在 /usr/bin 以前。不然,請將如下內容添加到 ~/.bash_profile 文件中:
export PATH=/opt/local/bin:$PATH
注意:若是主目錄中沒有 .bash_profile 文件,請建立一個。
經過 MacPorts 獲取 Make、Git 和 GPG 程序包:
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
若是您使用 Mac OS X v10.4,還須要安裝 bison:
POSIXLY_CORRECT=1 sudo port install bison
設置文件描述符數量上限 在 Mac OS 中,可同時打開的文件描述符的默認數量上限過低,在高度並行的編譯流程中,可能會超出此上限。
要提升此上限,請將下列行添加到 ~/.bash_profile 中:
# set the number of open files to be 1024
ulimit -S -n 1024
複製代碼
·
Repo 是一款工具,可以讓您在 Android 環境中更輕鬆地使用 Git。要詳細瞭解 Repo,請參閱開發部分。
要安裝 Repo,請執行如下操做:
一、確保主目錄下有一個 bin/ 目錄,而且該目錄包含在路徑中:
mkdir ~/bin
PATH=~/bin:$PATH
複製代碼
二、下載 Repo 工具,並確保它可執行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
複製代碼
安裝 Repo 後,設置您的客戶端以訪問 Android 源代碼代碼庫:
一、建立一個空目錄來存放您的工做文件。若是您使用的是 MacOS,必須在區分大小寫的文件系統中建立該目錄。爲其指定一個您喜歡的任意名稱:
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
複製代碼
注意:進入掛載的映像目錄,須要 cd ..
兩次退到系統根目錄,ls
能夠看到有 Volumes,以下圖所示:
此目錄下會包含咱們默認的系統盤和本身掛載上去的映像,此處咱們命名爲 android, cd android/WORKING_DIRECTORY
坑點:此處銜接上面建立的android.dmg.sparseimage
磁盤映像,你須要 mount
這個磁盤映像,進入並在這裏面建立WORKING_DIRECTORY
,這個磁盤映像就是區分大小寫的目錄,case-sensitive directory.
若是隻是把 WORKING_DIRECTORY
隨便建立在主目錄下,因爲當前Mac 默認是不區分大小寫的,因此後面進行編譯時,會在 make clobber
這一步 報錯,以下所示:
Case Insensitive Filesystem
If you are building on an HFS filesystem on Mac OS, you may encounter an error such as
************************************************************
You are building on a case-insensitive filesystem.
Please move your source tree to a case-sensitive filesystem.
************************************************************
複製代碼
二、使用您的真實姓名和電子郵件地址配置 Git。要使用 Gerrit 代碼審覈工具,您須要一個與已註冊的 Google 賬號關聯的電子郵件地址。確保這是您能夠接收郵件的有效地址。您在此處提供的姓名將顯示在您提交的代碼的提供方信息中。
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
複製代碼
坑點:此處郵箱最好填寫爲 gmail,而且該郵箱就是 GitHub 的註冊郵箱,對應GitHub名。
三、運行 repo init 以獲取最新版本的 Repo 及其最近的全部錯誤更正內容。
坑點:如下兩條命令都是在初始化repo,二選一,建議選第二條命令,能夠配置本身想要的分支。
您必須爲清單指定一個網址,該網址用於指定 Android 源代碼中包含的各個代碼庫將位於工做目錄中的什麼位置。
repo init -u https://android.googlesource.com/platform/manifest
複製代碼
不帶參數的 manifest命令用於獲取master上最新的代碼,可是能夠經過-b參數指定獲取某個特定的android版本,好比咱們想要獲取android-8.0.0_r17分支,那麼命令以下:
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r17
複製代碼
要查看分支列表,請參閱 源代碼標記和版本
初始化成功後,系統將顯示一條消息,告訴您 Repo 已在工做目錄中完成初始化。剛纔建立的客戶端 bin 目錄中如今應包含一個 .repo 文件,大小 29k,清單等文件將保存在該目錄下。
要將 Android 源代碼樹從默認清單中指定的代碼庫下載到工做目錄,請運行如下命令:
repo sync
複製代碼
Android 源代碼文件將位於工做目錄中對應的項目名稱下。初始同步操做將須要 1 個小時或更長時間才能完成。要詳細瞭解 repo sync 和其餘 Repo 命令,請參閱開發部分。
參考連接:www.jianshu.com/p/ef35a1eef…
坑點中的坑點:因爲此處連端口號都修改了,會致使後面編譯時,jack-server(Android 源碼自帶編譯工具) 沒法啓動,由於 jack-server 默認配置的端口是 8077,而藍燈代理的端口不是這個,須要修改 .jack-setting 文件中的端口號配置,如圖:
注意,jack-server 目錄是隱藏文件,是在編譯以後才生成的,此處也是回過頭來補充的坑點中的坑點,須要將隱藏文件顯示出來才能看到。
修改如圖:
此處因爲國內網絡訪問不了谷歌,解決方案是設置代理,我用的是藍色的燈籠這個,在網頁上找到設置 ->高級設置 ->HTTP(S)代理服務器 具體方法
找到 HTTP(S)代理服務器:127.x.x.x:xxxxx,在終端輸入一下命令, 你的代理IP和端口號一併複製黏貼上去, 就能夠進行 repo sync 了,不然只能是failed。
export {http,https}_proxy='http://127.x.x.x:xxxxx'
複製代碼
讓終端走代理的方法有不少種,這個辦法的好處是簡單直接,而且影響面很小(只對當前終端有效)。
正常下載源碼如圖所示,放它下載一夜,屏幕設置爲不關閉,省得進入休眠狀態致使斷網。
如何知道下載好的 AOSP 是什麼版本?
找到 build/make/core/version_defaults.mk
文件打開,搜索PLATFORM_SDK_VERSION
,找到了 PLATFORM_SDK_VERSION := 26
,即本次下載的Android O 源碼本人啦。
下載完畢的提示以下圖所示:
Syncing work tree: 100% (568/568), done.