鳥人的Android揭祕(3)——Android 編譯環境搭建

1、主機環境要求php

      要順利編譯 Android 源代碼,硬件環境和操做系統都必須知足必定的條件。官方推薦的硬件環境配置是:html

  • 編譯 Gingerbread(2.3.x)及後續版本必須使用64位系統
  • 需至少留出100G 的磁盤空間用於遷出(checkout)Android 源代碼,如編譯單個版本,需至少留出150G 的磁盤空間,如編譯多個版本,則需留出至少200G 的磁盤空間。若是啓用了 ccache(complier cache,編譯器高速緩存工具),所需的磁盤空間就必須更大。
  • 如使用 Linux 系統,RAM/swap 加起來必須不小於16G

      由上可見,編譯 Android 源代碼所需的硬件環境要求仍是比較高的,但筆者使用 Mac 系統,在克隆出一塊100G 的空間後,遷出並編譯完 Android 源代碼,仍然留有10幾 G 的剩餘空間,可見官方推薦配置只是建議,並不是強制要求。java

      對於操做系統,Android 能夠在 GNU/Linux 或 Mac 操做系統上編譯,但編譯不一樣的 Android 版本對操做系統的要求也不一樣,具體要求以下:python

GNU/Linux:android

  • Android 6.0 (Marshmallow) - AOSP master:Ubuntu 14.04 (Trusty)[1]
  • Android 2.3.x (Gingerbread) - Android 5.x (Lollipop):Ubuntu 12.04 (Precise)
  • Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu 10.04 (Lucid)

Mac OS (Intel/x86):git

  • Android 6.0 (Marshmallow) – AOSP master:Mac OS v10.10 (Yosemite)及後續版本,Xcode 4.5.2,Command Line Tools(Xcode 中的一款工具,能夠在命令行中運行C程序)
  • Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),Xcode 4.5.2,Command Line Tools
  • Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或者 Mac OS X v10.7 (Lion),Xcode 4.2
  • Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard)或者Mac OS X v10.6 (Snow Leopard),Mac OS X v10.5 SDK

2、安裝 VirtualBoxubuntu

      編譯 Android 源代碼要求必須使用 GNU/Linux 操做系統,對於條件容許的讀者來講,最方便的方式莫過於直接基於 Ubuntu/Mac系統進行操做。若是是使用 Windows 操做系統的讀者,咱們也有辦法解決,能夠先在 Windows 操做系統上安裝虛擬機軟件,而後再基於此虛擬機軟件上安裝 Ubuntu 操做系統。xcode

      VirtualBox 是由 Oracle(甲骨文)公司提供的一款開源、免費的虛擬機軟件,與其它虛擬機軟件相比更輕巧、更新速度快、運行速度更快,有 Windows、OS X、Linux、Solaris等版本。讀者能夠從如下網址直接下載:https://www.virtualbox.org/wiki/Downloads,安裝界面以下圖所示[2],安裝過程按照軟件界面提示操做便可。緩存

      成功安裝 VirtualBox 後,運行它,點擊界面左上角的「新建(N)」按鈕,便可新建虛擬機。在「虛擬電腦名稱和系統類型」界面中,選擇類型爲 Linux,版本爲 Ubuntu (64-bit),以下圖所示。在建立虛擬機時,內存和硬盤儘可能選擇大一些,此處筆者設置內存爲2G,而硬盤空間設置爲100G[3]。bash

3、安裝 Ubuntu

      Ubuntu(烏班圖)是一個以桌面應用爲主的免費開源的 Linux 操做系統,應用很是普遍,有32位和64位兩種版本,讀者從如下網址能夠下載:https://www.ubuntu.com/download/desktop

      使用虛擬機的好處是能夠直接從下載好的 ISO 映像文件安裝 Ubuntu 系統。在 VirtualBox 中選擇建立好的虛擬機,點擊「設置(S)」按鈕,在彈出的設置窗口中,切換到存儲標籤頁,再在 IDE 控制器屬性的虛擬光驅中,選擇下載的 Ubuntu 映像文件[4],以下圖所示。設置完成後,單擊「啓動(T)」按鈕,便可在虛擬機中安裝 Ubuntu。

      Ubuntu(烏班圖)是一個以桌面應用爲主的 Linux 操做系統,其名稱來自非洲南部祖魯語或豪薩語的「ubuntu」一詞,意思是「人性」、「個人存在是由於你們的存在」,是非洲傳統的一種價值觀,相似華人社會的「仁愛」思想。Ubuntu 基於Debian發行版和GNOME桌面環境,而從11.04版起,Ubuntu 發行版放棄了 Gnome 桌面環境,改成Unity,與Debian的不一樣在於它每6個月會發佈一個新版本。Ubuntu 的目標在於爲通常用戶提供一個最新的、同時又至關穩定的主要由自由軟件構建而成的操做系統。Ubuntu 具備龐大的社區力量,用戶能夠方便地從社區得到幫助。2013年1月3日,Ubuntu 正式發佈面向智能手機的移動操做系統。                               

4、搭建 Android 編譯環境

      前面咱們講解了 VirtualBox 虛擬機的安裝,以及如何在虛擬機上安裝 Ubuntu 操做系統的相關知識。下面咱們將講解編譯 Android 平臺所需的工具和具體的編譯方法。

4.1 編譯環境搭建

     在 Ubuntu 中編譯 Android 平臺,首先須要安裝配置以下工具[5]:

  • 安裝 JDK 1.8,在 Ubuntu 上使用 OpenJDK 便可
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
  • 配置 JDK 的版本,如系統存在多個版本,則切換爲 JDK1.8
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
  • 安裝必需的工具包
$ 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 python-networkx
  • 配置 USB
$ wget -S -O - http://source.android.com/source/51-android.rules | sed       "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo             udevadm control --reload-rules

      經過以上步驟,咱們即完成了對 Ubuntu 操做系統上 Android 編譯環境的搭建,下面繼續講解 Mac 系統的環境搭建。

      因爲 Mac 操做系統默認大小寫不敏感,而 Android 源代碼所使用的版本管理工具 git 要求工做在大小寫敏感的環境裏,基於此,若是讀者如想在 Mac 系統上編譯 Android 源代碼,需作以下設置:

  • 建立一個大小寫敏感、大小爲100G 的磁盤映像,藉助 Mac 系統提供的磁盤工具能夠很容易作到
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg

        後續如需修改該磁盤映像的大小,可經過如下命令完成

# hdiutil resize -size <新的磁盤大小>g ~/android.dmg.sparseimage
  • 掛載磁盤

        上述步驟建立的磁盤映像必須掛載後才能訪問,編輯 ~/bash_profile腳本,在文件的最後添加以下工具函數

# 掛載android 磁盤映像
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
# 卸載 android 磁盤映像
function umountAndroid() { hdiutil detach /Volumes/android; }

      這樣,每次系統重啓後,只需在終端窗口執行 mountAndroid 便可掛載上述步驟建立的磁盤映像,執行 umountAndroid 便可卸載磁盤映像。若是不想每次都這麼麻煩地輸入這些命令,也能夠在 ~/.bash_profile 腳本的最後再加上 mountAndroid,以下圖所示。

  • 安裝 Xcode Command Line Tools
$ xcode-select --install
  • 安裝 MacPorts 工具

        從如下網址下載相應的版本安裝:https://www.macports.org/install.php

        安裝完成後,確保在環境變量 PATH 中,/opt/local/bin 必須出如今/usr/bin 以前(/opt/local/bin 爲 MacPorts 的安裝路徑),添加如下腳本到 ~/.bash_profile 中

export PATH=/opt/local/bin:$PATH
  • 經過 MacPorts 安裝make、git、GPG 等工具包
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
  • 回退 gmake 版本

        Mac 系統默認的 gmake 版本是3.82,但此版本中有 bug,會致使編譯 Android 源代碼失敗,因此咱們必須先將 gmake 版本回退到3.81

        編輯 /opt/local/etc/macports/sources.conf 文件,在 rsync 一行上邊添加以下代碼

file:///Users/Shared/dports

        接着在終端窗口中執行如下命令建立目錄

$ mkdir /Users/Shared/dports

        而後按順序執行如下命令完成 gmake 的安裝

$ svn co --revision 50980  http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
$ portindex /Users/Shared/dports
$ sudo port install gmake @3.81
  • 調整文件描述符的大小限制

      Mac 操做系統上默認容許同時打開的文件描述符數限制較低,而 Android 源代碼編譯時會啓動大量線程進行並行編譯,其打開的文件描述符可能超過此限制致使編譯失敗,編輯 ~/.bash_profile 加入以下命令可解決此問題

# 設置容許同時打開的文件數量爲1024
ulimit -S -n 1024

    至此,咱們就完成了對 Mac 系統上 Android 平臺編譯環境的搭建,接下來咱們將講解源代碼下載和編譯。

 

[1] 筆者寫此書時最新的 Android 版本爲7.1,最新 Ubuntu 版本爲16.04.1,後續如無特殊說明,均以這兩個版本爲例。

[2] 筆者使用的是 Mac 操做系統演示安裝過程,其它操做系統上安裝 VirtalBox 的過程與此相似。

[3]虛擬機建立後,內存仍能夠再調整,但硬盤空間沒法再設置,在宿主機容許的狀況下儘可能設置大一些。讀者也無需擔憂空間浪費,虛擬機的磁盤空間是動態分配的,實際使用多少就是多少,最大不超過此處設置。

[4] 本書中使用 ubuntu-16.04.1-desktop-amd64.iso

[5] 此處僅講解編譯 Android 7.1所需的環境,讀者如想編譯其它版本,可自行參考http://source.android.com/source/initializing.html

相關文章
相關標籤/搜索