歡迎來學習並開發 AOSP!本章節將教導大家如何在 Mac OS X 和 Ubuntu 14.04 LTS 上設定好你的 AOSP 開發環境。
請依據您的作業系統前往操作指導:Mac OS X、Ubuntu 14.04 LTS
一個不好的消息是,如果要開發 AOSP 你最少要準備約 100 GB 的磁碟空間。如果你的Mac是總容量較小的型號,那要準備出這個空間可不容易呀!不過沒關係,這部份你可以準備一張 128 GB 的高速 SD 卡來代替!(如果你用的是外接硬碟,則設定同 SD 卡。不過 USB 的傳輸速度很慢,所以還是建議用 SD 卡)
以下有兩個準備空間的選項,請依照你的需求選擇其一即可
AOSP 的檔案和編譯環境是有區分大小寫的(比如說,同檔名但大小寫不同會被視為不同的檔案)。而 Mac 上預設的檔案系統(File System)是不分大小寫的,所以我們要先切一塊磁區出來,並使用分大小寫的檔案系統。
$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg
官方文件是建議切 40 GB 出來,但最新(AOSP 上的 master branch)光下載 Source Code 就 38 GB 了……這邊建議是直接切個 100 GB 出來。不夠也不用擔心,這個之後還能調大。
接著會在你的家目錄($ ~/
)下找到剛建立出來的磁區 android.img
。它也有可能被叫做 android.img.sparseimage
,以下為了方便,我們統一把他命名成 android.img.sparseimage
$ mv ~/android.img ~/android.img.sparseimage # 僅在你建出來的磁區叫做 android.img 時才需做這個步驟
如果之後需要修改這個磁區的大小(通常是要改大),可以使用以下指令:
$ hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
由於切出來的這個磁區有點像是在電腦內切出一個 USB 磁碟,所以這個 USB 是需要掛載(mount
指令)後才能用的。當然可以掛載就可以卸載(umount
指令)。而因為這兩個指令其實不是很好背,所以我們來為我們的 CLI 建立兩個方便掛載和卸載 Android 磁區的指令
打開 ~/.bash_profile
,加入以下兩段內容:
- 指令 1: mountAndroid
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android; }
- 指令 2: umountAndroid
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
完成後,重開你的 Terminal,便可以使用 mountAndroid 及 umountAndroid 了指令了。
mountAndroid
指令會將 Android 磁區掛載到 /Volumes/android
的位置,相對的 umountAndroid
就是卸載嘍
當然啦,因為這個磁區就像是掛載上電腦的一樣,所以你也可以打開 Finder 手動退出它
由於 AOSP 所需要的是區分大小寫的磁區,所以我們要將 SD 記憶卡給格式化成我們需要的格式。
請依下列步驟
- 插上 SD 記憶卡
- 請確定記憶卡內沒有任何需要的資料,過程中記憶卡的資料將永久消失
- 打開你電腦中的**
磁碟工具程式
** - 選擇SD記憶卡後,按下**
清除
**標籤 - 名稱隨意取一個,但保險起見不要有空格
- 格式請選擇**
OS X 擴充格式 (區分大小寫、日誌式)
** - 按下**
清除
**按鈕 - 完成!
請參考官網�,一般來說 Android App 開發者該裝的都裝過了。
以 Android 6.0 為例 需要環境如下
- AOSP: AOSP master
- Mac OS v10.10 (Yosemite) 或更新版本
- Xcode 4.5.2 app store
- Command Line Tools
$ xcode-select --install
- jdk 8u45 或更新版本 jdk
- Python 2.6 -- 2.7 python.org
- GNU Make 3.81 -- 3.82 gnu.org
- Git 1.7 或更新版本 git-scm.com
- Device binaries 設備的二進制文件 按 download 下載最新。
- MacPorts macports.org
雖然官網上的教學用的是 MacPort,但我本身覺得 homebrew 比較好用而不喜歡 MacPort,所以我是安裝 homebrew
$ brew install gnupg # 安裝 gnupg
Mac 上應該已經內建 git
1.7+(可用 git --version
查尋)及 python
2.7.+(可用 python --version
查)。注意 Python 3.x 是不行的,非 2.7 不可。主要是因為 Python 3.x 不相容 Python 2.x,而在早期 AOSP 開發過程中,有很多的檔案和工具是用 Python 2.7 寫的,官方也沒有把這些檔案轉成 Python 3.x 的版本。通常來說電腦內輸入 python
會用 2.x,而輸入 python3
會用 3.x)
以下是官網沒提到,但實際上你需要安裝的 Libraries
$ brew install cmake # 取代 gnu-make
$ brew install ninja # ninja-build,Android 6.0 後期開始採用的新 build code 機制,用來取代 GNU make
$ brew install xz # ninja-build 的過程會用到
curl
也必需安裝,但這邊有個特殊情況。Mac內建就有一個 curl,但用內建的在編譯過程會有問題,所以我們還是必需自己裝一份。而這邊不能直接用 brew install curl
裝,因為 AOSP 需要的 curl
必需是用 openssl
來編譯,但預設 brew install curl
並不是用 openssl
這個 Library 來編,所以這邊在安裝時要用:
$ brew install curl --with-openssl # 先裝起來,下一章會再處理選用自己裝的 curl 這件事。
如果就是想使用 MacPorts ,請根據自己的作業系統到macports.org下載。
$ export PATH=/opt/local/bin:$PATH #設定環境變數
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg ninja xz #安裝 make, libsdl, git, ninja, xz and GPG
$ export USE_CCACHE=1 #添加環境變數
$ mkdir chch
$ CCACHE_DIR=/chch/.ccache #建立緩存的目錄
$ prebuilts/misc/darwin-x86/ccache/ccache -M 50G #設定緩存的空間
Mac 預設上有限制最大 FD 開啟數量(簡單來說,Mac 有限制同時間開啟的檔案數量),而這個數量不夠我們編譯 AOSP。因此我們必需調高它。
在 ~/.bash_profile
內加入以下程式碼
# set the number of open files to be 1024
$ ulimit -S -n 1024
完成這步後請記得重新打開你的終端機,這樣改動才會生效。
<TODO 優化 Build 系統(原理是做 cache,但因為 Mac 容量有限所以我覺得別設比較好……)>
至此,基本環境設定就算完成了!接下來就是下載 AOSP 原始碼嘍!
參考來源:官網。
$ sudo apt-get update
$ 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 ccache libgl1-mesa-dev libxml2-utils xsltproc unzip openjdk-7-jdk
啟用 ccache 機制
$ vi ~/.bashrc
# 加入以下內容
export USE_CCACHE=1