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,請另行執行:
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
如果是ubuntu11.10,請另行執行:
$ sudo apt-get install libx11-dev:i386

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拷貝至本地即可。

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系統,請參考:
當然,目前能將編好的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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章