在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 初始化編譯環(huán)境
下載源碼
根據(jù)設(shè)備構(gòu)建
Git 資源
構(gòu)建系統(tǒng)
Android 平臺(tái) 64 位構(gòu)建指導(dǎo)
初始化編譯環(huán)境
Android 源代碼
品牌指南
已知的問題
Repo 命令手冊(cè)
構(gòu)建內(nèi)核
Bug 的生命周期
代碼主線、分支和版本
使用 Eclipse
提交補(bǔ)丁
下載與構(gòu)建
參與
項(xiàng)目角色
補(bǔ)丁的生命周期
提交 Bugs
關(guān)于代碼風(fēng)格的指導(dǎo)
開發(fā)
代碼名稱,標(biāo)簽和版本號(hào)

初始化編譯環(huán)境

這個(gè)章節(jié)闡述如何建立起你的本地工作環(huán)境來構(gòu)建 Android 源文件。你需要使用 Linux 或 Mac OS 操作系統(tǒng)。目前暫不支持在 Windows 下編譯。

想對(duì)整個(gè)代碼審查和代碼更新過程有個(gè)整體的了解,請(qǐng)參閱 Life of a Patch

選擇一個(gè)分支

部分構(gòu)建環(huán)境的需求取決于你打算編譯的源碼版本,查看 Build Numbers 里面包含一個(gè)完整的分支列表供你選擇。你也許想選擇下載最新的源碼(Master)進(jìn)行構(gòu)建,在這種情況下你可以在初始化倉庫的時(shí)候簡(jiǎn)單的忽略分支規(guī)范。

當(dāng)你選擇了一個(gè)分支后,參考下面相應(yīng)的說明來搭建你的編譯環(huán)境。

搭建一個(gè) Linux 平臺(tái)的編譯環(huán)境

這些說明適用于所有分支,包括 master 分支。

通常內(nèi)部測(cè)試 Android 的構(gòu)建是在最近一個(gè)版本的 Ubuntu LTS (14.04)中,但是大多數(shù)發(fā)行版本都應(yīng)該具備構(gòu)建所需的工具,歡迎反饋您在其他版本上的嘗試結(jié)果,無論成功還是失敗。

Gingerbread(2.3.x)或以上版本,包括 master 分支,都需要一個(gè)64位的環(huán)境,它之前的版本可以在32位系統(tǒng)下進(jìn)行編譯。

提示:參閱 下載與構(gòu)建了解對(duì)硬件環(huán)境和軟件環(huán)境的需求。然后參考下面對(duì) Ubuntu 和 Mac OS 下構(gòu)建的詳細(xì)說明。

安裝JDK

Android Open Source Project(AOSP)的 master 分支需要 Java 7。在 Ubuntu 下可以使用 OpenJDK

Java 7:適用于最新版本的 Android

$ sudo apt-get update                           
$ sudo apt-get install openjdk-7-jdk                    

也可以運(yùn)行如下指令升級(jí)默認(rèn)的 Java 版本:

sudo update-alternatives --config java                  
sudo update-alternatives --config javac                 

如果你遇到 Java 版本錯(cuò)誤,參考 wrong-java-version 中描述的來設(shè)置它的路徑。

開發(fā)較早版本的 Android,下載安裝相應(yīng)的 Java JDK
Java 6:適用 Gingerbread 到 KitKat 的版本
Java 5:適用 Cupcake 到 Froyo 的版本

提示: 在構(gòu)建過程中的命令會(huì)確定使用的是 Sun JDK 而不是先前安裝的 JDK。

安裝需要的包(Ubuntu 14.04)

你將需要一個(gè)64位版本的 Ubuntu 。推薦 Ubuntu 14.04。

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip

安裝需要的包(Ubuntu 12.04)

你也許會(huì)使用 Ubuntu 12.04 來構(gòu)建較早版本的 Android。 master 分支和最近的發(fā)行都不支持 12.04 版本。

$ sudo apt-get install git gnupg flex bison gperf build-essential \                   
    zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \                  
    libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \                   
    libgl1-mesa-dev g++-multilib mingw32 tofrodos \                          
    python-markdown libxml2-utils xsltproc zlib1g-dev:i386                              
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so                 

安裝需要的包(Ubuntu 10.04 -- 11.10)

在 Ubuntu 10.04-11.10 上構(gòu)建已不在被支持,但仍可以用來構(gòu)建較早的 AOSP。

$ sudo apt-get install git gnupg flex bison gperf build-essential \                        
    zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \                   
    x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \                     
    libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \                        
    libxml2-utils xsltproc

在 Ubuntu 10.10 中:

$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

在 Ubuntu 11.10 中:

$ sudo apt-get install libx11-dev:i386

配置 USB 接口

在 GNU/Linux systems 系統(tǒng)下,(尤其是 Ubuntu 系統(tǒng)),通常用戶在默認(rèn)情況下不能直接讀取 USB 設(shè)備。我們要對(duì)系統(tǒng)進(jìn)行配置才能允許這種操作。

推薦的做法是創(chuàng)建一個(gè)文件 /etc/udev/rules.d/51-android.rules (作為 root 用戶),接著將下面對(duì)內(nèi)容復(fù)制上去。 <username> 必須被替換成實(shí)際被授權(quán)通過 USB 訪問手機(jī)的用戶名。

# adb protocol on passion (Nexus One)               
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"           
# fastboot protocol on passion (Nexus One)                 
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"              
# adb protocol on crespo/crespo4g (Nexus S)               
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"            
# fastboot protocol on crespo/crespo4g (Nexus S)          
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"            
# adb protocol on stingray/wingray (Xoom)                
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"            
# fastboot protocol on stingray/wingray (Xoom)                
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"              
# adb protocol on maguro/toro (Galaxy Nexus)              
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"            
# fastboot protocol on maguro/toro (Galaxy Nexus)            
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"              
# adb protocol on panda (PandaBoard)                
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"             
# adb protocol on panda (PandaBoard ES)                  
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>"              
# fastboot protocol on panda (PandaBoard)                 
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"             
# usbboot protocol on panda (PandaBoard)                   
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"              
# usbboot protocol on panda (PandaBoard ES)                
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"              
# adb protocol on grouper/tilapia (Nexus 7)                  
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"               
# fastboot protocol on grouper/tilapia (Nexus 7)                  
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"            
# adb protocol on manta (Nexus 10)                    
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"              
# fastboot protocol on manta (Nexus 10)                
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"          

這些規(guī)則會(huì)在下次插入設(shè)備的時(shí)候生效。因此可能需要先拔出設(shè)備再插回去。

知道這些就可以在 Ubuntu Hardy Heron (8.04.x LTS) 和 Lucid Lynx (10.04.x LTS) 上工作。其他版本的 Ubuntu 或其他 GNU/Linux 的發(fā)行版本需要不同的設(shè)置。

使用一個(gè)單獨(dú)的輸出目錄

默認(rèn)情況下,每個(gè)構(gòu)建出來的結(jié)果都存儲(chǔ)在系統(tǒng)資源目錄的子文件夾 out/ 目錄下。

在一些擁有多個(gè)存儲(chǔ)設(shè)備的機(jī)器上。構(gòu)建在存儲(chǔ)源文件并輸出到單獨(dú)卷的時(shí)候會(huì)進(jìn)行的較快。還有其他一些性能,比如可以將輸出存儲(chǔ)到一個(gè)經(jīng)過速度優(yōu)化的文件系統(tǒng)中并且不會(huì)造成穩(wěn)健性崩潰,因?yàn)樗形募伎梢栽谖募p壞的情況下被重新生成。

要使用這種功能,配置輸出 OUT_DIR_COMMON_BASE 變量指向到你存儲(chǔ)輸出數(shù)據(jù)的地方。

export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>

每個(gè)源代碼樹的輸出目錄都將在文件夾創(chuàng)建后以源碼樹命名。

舉個(gè)例子,如果你現(xiàn)在有一些源代碼樹,比如 /source/master1/source/master2 并且 OUT_DIR_COMMON_BASE 設(shè)置為 /output,輸出目錄就會(huì)是 /output/master1/output/master2

有一個(gè)重要的情況就是不能將多個(gè)源代碼樹輸出到同一個(gè)目錄并且具有相同的名稱,否則他們會(huì)在同時(shí)使用同一個(gè)輸出目錄的時(shí)候出現(xiàn)不可預(yù)知的結(jié)果,然后終止。

這些僅支持 Jelly Bean (4.1) 及以上版本,包括 master 分支。

在 Mac OS 平臺(tái)搭建編譯環(huán)境

在默認(rèn)安裝下, Mac OS 運(yùn)行在一個(gè)保留但不區(qū)分大小寫的文件系統(tǒng)上。這種文件系統(tǒng)并不被 git 支持而且一些 git 指令 (比如 git status )表現(xiàn)異常。出于此原因,我們推薦你在一個(gè)區(qū)分大小寫的文件系統(tǒng)上工作使用 AOSP 源代碼樹。 使用磁盤映像可以非常容易地達(dá)到目的,討論如下。

一旦合適的文件系統(tǒng)準(zhǔn)備好,在現(xiàn)代的 Mac OS 環(huán)境下構(gòu)建 master 分支會(huì)變得非常容易。較早的一些分支,包括 ICS,需要一些額外的工具和 SDK。

創(chuàng)建一個(gè)區(qū)分大小寫的磁盤映像

你可以用你的 Mac OS 環(huán)境下正在使用對(duì)磁盤映像創(chuàng)建一個(gè)區(qū)分大小寫的文件系統(tǒng)。為了創(chuàng)建這個(gè)映像,啟動(dòng)磁盤工具并選擇 "New Image" 。完成構(gòu)建最少需要 25GB;以后可能會(huì)需要更多。使用分散的映像可以節(jié)省空間并且以后可以根據(jù)需要增大。請(qǐng)確定選擇“區(qū)分大小寫,日志”作為卷格式。

你也可以在 shell 里輸入下面的命令來創(chuàng)建它。

# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg

這會(huì)創(chuàng)建一個(gè) .dmg(或者 .dmg.sparsefile)文件,一旦被安裝,將成為具有Android 開發(fā)所需格式的驅(qū)動(dòng)器。

如果你以后需要更大的空間,你可以使用下面的指令來重新設(shè)置分散映像的大小。

# hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

一個(gè)名為 android.dmg 的地盤映像被安裝在你的主目錄下,你可以在 ~/.bash_profile 文件中添加一個(gè)輔助功能模塊。

  • 執(zhí)行 mountAndroid 的時(shí)候安裝這個(gè)鏡像文件:
# mount the android file image               
    function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }

注意:如果你的系統(tǒng)創(chuàng)建了一個(gè) .dmg.sparsefile 文件,請(qǐng)將 -/android.dmg 替換為 -/android.dmg.sparsefile 。

  • 執(zhí)行 umountAndroid 的時(shí)候卸載它:
# unmount the android file image                     
    function umountAndroid() { hdiutil detach /Volumes/android; }

一旦你安裝了 android 卷,你可以在這里進(jìn)行你所有的工作。也同樣可以像一個(gè)外部驅(qū)動(dòng)器一樣直接彈出(卸載)它。

安裝 JDK

Android 開源工程 (AOSP) 中 Android 的 master 和 5.0.x 分支需要 Java 7。在 Mac OS 中,使用 jdk-7u71-macosx-x64.dmg

要開發(fā) Android Gingerbread 到 KitKat 之間的版本,下載并安裝 Java JDK 的 Java 6 版本。

Master 分支

要在 Mac OS 環(huán)境下構(gòu)建最新版本的源代碼,你需要一臺(tái)具備 Intel/x86 的機(jī)器并且系統(tǒng)在 Mac OS X v10.8(Mountain Lion)或以上, Xcode 版本在4.5.2以上并包含命令行工具。

5.0.x 及其之前的分支

要在 Mac OS 環(huán)境下構(gòu)建 5.0.x 及其之前的源碼,你需要一臺(tái)具備 Intel/x86 的機(jī)器并且系統(tǒng)在 Mac OS X v10.8(Mountain Lion)或以上, Xcode 版本在4.5.2以上并包含命令行工具。

4.4.x 及其之前的分支

要在 Mac OS 環(huán)境下構(gòu)建 4.2.x 及其之前的源代碼,你需要一臺(tái) Intel/x86 的機(jī)器并且系統(tǒng)為 Mac OS X v10.6 (Snow leopard) 或 Mac OS X v10.7 (Lion),具備 Xcode 4.2(蘋果開發(fā)者工具)。盡管 Lion 系統(tǒng)并不事先具備 JDK,但它會(huì)在你嘗試構(gòu)建源碼的時(shí)候自動(dòng)安裝。

剩下的關(guān)于 Mac OS 的內(nèi)容只針對(duì)那些希望構(gòu)建較早分支的用戶。

4.0.x 及其之前的分支

要在 Mac OS 環(huán)境下構(gòu)建 android-4.0.x 及其之前的版本分支,你需要一臺(tái) Intel/x86 的機(jī)器并且運(yùn)行 Mac OS X v10.5 (Leopard) 系統(tǒng)或 Mac OS X v10.6 (Snow Leopard) 系統(tǒng),同時(shí)你將需要 Mac OS X v10.5 的 SDK 。

安裝需要的包

  • Apple 開發(fā)者平臺(tái)獲取安裝 Xcode。我們推薦 3.1.4 或更新版本(比如 gcc 4.2)。4.x 的版本可能會(huì)造成困難。如果你還沒有準(zhǔn)備好注冊(cè)成為 Apple 開發(fā)者,則需要?jiǎng)?chuàng)建一個(gè) Apple ID 來進(jìn)行下載。

  • macports.org獲取 MacPorts 的安裝。

注意:確保在你的 /usr/bin 路徑之前存在 /opt/local/bin 路徑。如果沒有,請(qǐng)將下面的內(nèi)容添加到你的 ~/.bash_profile 文件中:

export PATH=/opt/local/bin:$PATH

注意:如果在你的主目錄下沒有 .bash_profile 文件,那就創(chuàng)建一個(gè)。

  • 從 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

從 make 3.82 中恢復(fù)

在 Android ICS 之前的版本,存在一個(gè) bug 阻止了 android 的構(gòu)建。你可以按照下面的步驟使用 MacPorts 安裝 3.81 版本:

  • 編輯 /opt/local/etc/macports/sources.conf 并添加下面一行內(nèi)容
file:///Users/Shared/dports

添加完上面一行。之后創(chuàng)建這樣一個(gè)目錄:

$ mkdir /Users/Shared/dports
  • 在新的 dports 目錄中,運(yùn)行
$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
  • 為你的本地倉庫創(chuàng)建一個(gè)端口:
$ portindex /Users/Shared/dports
  • 最后,輸入下面的指令安裝舊版的 gmake:
$ sudo port install gmake @3.81

設(shè)置文件描述限制符

在 Mac OS 上,默認(rèn)的文件同時(shí)打開數(shù)量值太低,所以一個(gè)高并發(fā)的構(gòu)建會(huì)超出這個(gè)限制。

為了增加這個(gè)上限,將下面的一行添加到你的 -/.bash_profile 文件中:

# set the number of open files to be 1024
    ulimit -S -n 1024

優(yōu)化構(gòu)建環(huán)境(可選)

建立 ccache

你可以選擇性的讓構(gòu)建使用 ccache 匯編工具。 Ccache 作為一個(gè)編譯緩存器可以用來為重構(gòu)建提速。如果你經(jīng)常使用 make clean,或者經(jīng)常切換不同的工程進(jìn)行構(gòu)建的話,這將會(huì)非常好用。

在你的 .bashrc(或其它同類文件)中添加下面一行:

export USE_CCACHE=1

默認(rèn)情況下 cache 會(huì)被存儲(chǔ)在 ~/.ccache 下。如果你的主目錄在 NFS 活著其它非本地系統(tǒng)上,你也同樣需要在你的 .bashrc 文件中指定目錄。

export CCACHE_DIR=<path-to-your-cache-directory>

建議緩存大小設(shè)為 50 - 100 GB 之間。在你下載好源代碼之后運(yùn)行下面的指令:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

在 Mac OS 中,你應(yīng)該將 linux-x86 替換為 darwin-x86 :

prebuilts/misc/darwin-x86/ccache/ccache -M 50G

在構(gòu)建 Ice Cream Sandwich (4.0.x) 或更早版本的時(shí)候,ccache 會(huì)在一個(gè)不同的位置下:

prebuilt/linux-x86/ccache/ccache -M 50G

這些設(shè)置被存儲(chǔ)在 CCACHE_DIR 并且一直生效。

你的編譯環(huán)境已經(jīng)準(zhǔn)備好了,接下來下載源代碼。

上一篇:使用 Eclipse下一篇:已知的問題