Android原始碼 之 構建 編譯源碼的環境(Ubuntu篇)

來源:互聯網
上載者:User

標籤:原始碼   ubuntu   androidsource   

官方已經在Ubuntu LTS (14.04)上對原始碼進行了測試。其他系統也可以,筆者建議使用Ubuntu LTS (14.04)

一、系統要求:

1、Linux   或    Mac    (也可在虛擬機器上的Linux下進行)

2、若要編譯Gingerbread (2.3.x)及以上版本的原始碼,需要64位的系統內容,Gingerbread (2.3.x)以前的版本可以在32位系統上編譯。

       原始碼版本名稱和版本號碼、API層級列表見:http://blog.csdn.net/u013647453/article/details/45512455

3.至少50GB用來下載原始碼(a checkout),單分支編譯(single build)需要100GB,多分支編譯(Multiple build)需要大於等於150GB的空間。

4.Python2.6-2.7,官網:python.org(Ubuntu已內建,命令列:python可以查看版本)

5.GNU Make3.81--3.82,官網:gnu.org(Ubuntu已內建,命令列:make -version查看版本)

6.編譯master 分支需要   JDK7,編譯Gingerbread  至  KitKat版本需要JDK6, 編譯Cupcake至Froyo版本需要  JDK5.

            安裝JDK7:  $sudo apt-get update

                                    $sudo apt-get install openjdk-7-jdk  (命令列:java -version查看目前的版本)

7.Git1.7及以上版本,官網:git-scm.com  (Ubuntu沒有內建,使用sudo apt-get install git進行安裝,安裝後,git --version查看版本)


二、安裝必要的包

對於Ubuntu 14.04:

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


對於Ubuntu 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.4-11.10:

$ 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

另外對於10.10還要執行:sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

對於11.10還要執行:$ sudo apt-get install libx11-dev:i386


三、補充

1.使用Ccache。

Ccache意思是編譯時間的緩衝(Compiler Cache),使用後可以加速重編譯(rebuild)。如果經常使用make clean命令或者經常要在編譯好的東西指奸切換的話,建議使用Ccache。

將下行語句添加到    .bashrc檔案(~目錄下)中即可。緩衝的檔案預設儲存在~/.ccache檔案夾。

export USE_CCACHE=1

建議緩衝大小設定為50-100GB。Ubuntu設定命令為:(需要下載好原始碼後使用)

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

在蘋果電腦上,命令為:(將  linux-x86   改為   darwin-x86)

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

若需要編譯的原始碼是Ice Cream Sandwich (4.0.x)及以前版本的代碼,命令為:

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

上述命令的執行結果會被永久的儲存到   CCACHE_DIR  中。


2.改變編譯的輸出檔案夾位置(只支援Jelly Bean (4.1)及以上版本)

預設情況下,編譯的輸出檔案是儲存在  原始碼檔案夾下的 out  目錄中。

如果你的電腦有多個分區,將輸出檔案夾放到非原始碼所在分區的話,可以加快編譯速度。如果想要編譯更快,選擇儲存速度較快格式的分區,不要安全性較高格式的分區。

設定方法:

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


3.系統插上USB裝置無反應的問題的解決:(使用於較老的系統版本,較新的版本的系統無此問題,此方法已測試在Ubuntu  8.04.x LTS和10.04.x LTS上有效,其他版本無法保證)


建立檔案:/etc/udev/rules.d/51-android.rules(root使用者)

將以下內容粘貼進去,重新拔插裝置即可:(其中的<username>要替換為要讀取USB的使用者)

# 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>"


以上內容如有謬誤,敬請指出,多謝!

Android原始碼 之 構建 編譯源碼的環境(Ubuntu篇)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.