天天看點

Linux下 使用Repo和Git下載下傳Android源代碼并編譯

本日志介紹了下我個人在64位ubuntu 12.10下使用repo和git來下載下傳android源代碼的過程。本文參看了官方網頁的介紹:http://source.android.com/source/downloading.html,并結合了些許個人經曆。 編譯下載下傳android源碼需要大量時間、精力、人品,請廣大讀者謹慎上路。如果大家在閱讀本文時有任何問題,請發郵件至讨論: [email protected]   

1。編譯環境必須是64位的Linux系統。推薦使用ubuntu,建議版本号>=10.04。在ubuntu中執行以下指令安裝必要的包: 如果是ubuntu12.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
           

如果是ubuntu10.04-11.10,請先執行:

$ sudo apt-get install git-core 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
           

如果是ubuntu10.04,請另行執行: 如果是ubuntu11.10,請另行執行:

2。建立你要儲存Android源碼的檔案夾。例如我要存在home檔案夾下bin檔案夾裡。在指令行中輸入: mkdir ~/bin PATH=~/bin:$PATH

3。繼續在Terminal中輸入: curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo chmod a+x ~/bin/repo 這時候在你的home檔案夾下應該已經有一個bin檔案夾,其中有一個repo檔案。repo檔案相當于一個批處理檔案,極大地簡化了git的使用。因為android系統的各部分都放在上百個不同的代碼倉庫裡,若使用git clone <代碼倉庫位址> 指令下載下傳每個倉庫裡的源代碼,那麼下載下傳完所有的android源碼可能要執行上百次git clone,而repo檔案則将所有步驟變成了一個腳本檔案了。我們目前隻需要使用repo sync指令将所有代碼倉庫裡的master branch拷貝至本地即可。

更多的repo使用方法可見: http://source.android.com/source/version-control.html 或者參考我另外一篇博文:《Android源碼下載下傳——Repo\Git的常用指令介紹》 Android所有代碼倉庫清單可見: https://android.googlesource.com/?format=HTML

4。通過cd ~/bin将Terminal定位到~/bin檔案夾

5。在Terminal中(目前處于bin檔案夾)輸入以下指令,初始化repo。repo預設将下載下傳所有代碼倉庫中的master branch:

$ repo init -u https://android.googlesource.com/platform/manifest
           

如果此步成功,應該會有提示:Repo is initialized in your working directory. 在~/bin檔案夾内生成了.repo 隐藏檔案夾

若想讓repo下載下傳指定的branch而非master,可執行:

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
           

檢視目前android所有branch清單: http://source.android.com/source/build-numbers.html

仔細看看~/bin/.repo/manifest.xml檔案,裡面列出了repo需要同步的所有project的資訊。特别注意的是有一些project的group屬性為“notdefault”。在僅使用repo sync指令時,預設是不下載下傳這些project的。 想要連同下載下傳notdefault的project,請參考《Android源碼下載下傳——Repo\Git的常用指令介紹》一文中的使用repo下載下傳not default的project。

6。繼續輸入:repo sync 這樣就可以開始下載下傳最新源碼了。在中國大陸,網絡連接配接常常不穩定,導緻repo sync一半可能會失敗。但repo sync具有一定的斷點續傳的功能,失敗後隔一段時間(10分鐘左右就好)重新運作repo sync即可。

7。開始配置Ccache編譯緩存。将以下内容拷貝至/etc/profile中:

export USE_CCACHE=1
           

并且在指令行中執行:source /etc/profile 以使該環境變量生效 接着将Terminal定位到源碼檔案夾下,執行: prebuilts/misc/linux-x86/ccache/ccache -M 50G

8. 現在可以開始編譯源碼了 使用源碼中的build/envsetup.sh配置編譯所需環境

$ source build/envsetup.sh
           

9.接着執行lunch full-eng以明确我們待會兒編譯的目标為emulator上的android系統。 如果你想編譯能刷上真機的android系統,請參考: http://source.android.com/source/building-devices.html 當然,目前能将編好的android系統刷上去的真機型号不多,隻有Nexus幾個系列罷了。

10. 一般直接輸入make開始編譯就好.(官網上有說明,如果使用make -jn(n為某個自然數)可以多線程編譯,但我使用make -j4有時會産生意想不到的錯誤.固我一般隻用make直接開始編譯)

make後會在源代碼根目錄下産生out檔案夾,内有target和host兩個子檔案夾。target檔案夾一般存放的是與手機端有關的make結果,host檔案夾存放的是和pc端有關的内容。

11.若想編譯sdk,請參考:

http://maider.blog.sohu.com/255063790.html

常見問題彙總: 1.

http://hi.baidu.com/iptux/item/689e9957aaa40000e7c4a579

2. http://wenku.baidu.com/view/af341cf19e31433239689349.html

3.No command 'emulator' found, did you mean:

   Command 'qemulator' from package 'qemulator' (universe)

   emulator: command not found

解決辦法: 重新運作指令行:

1.source build/envsetup.sh

2.lunch full-eng

繼續閱讀