在Ubuntu下獲取Android4.0源代碼並編譯
搞了幾個月的Android應用開發,勉強算是個Android開發者了吧,Android本就是開源的,還是把源代碼下載下來自己編譯一下,看看是個什麼東西,出於好奇,和以後的職業發展,開始了無休止的Android研究過程。。。
這篇連載博客用來記錄我從下載源代碼到編譯的整個過程,開始百度和穀歌了無數資料,遇到了不少的問題,以總結出來,希望對後來者有所幫助,於我也算是一種總結吧
接下來首先開發獲取最新的Android源代碼,目前最新版本是4.0
要獲取源代碼,當然還得先看官方文檔怎麼說https://source.android.com/source/initializing.html
第一步:初始化編譯環境
To build the Android source files, you will need to use Linux or Mac OS. Building under Windows is not currently supported
大概意思就是指要編譯Android源代碼文件,你需要使用Linux或者Mac OS係統,在Windows下編譯當前不是被支持的,所以,得安個Linux,我目前用的是裝在虛擬機的Ubuntu,當然其它的也可以的。
Note: The source download is approximately 6GB in size. You will need 25GB free to complete a single build, and up to 80GB (or more) for a full set of builds.
這一句表示有空間容量的限製,我還在下載,據說完全下載後有6G左右,建議有多大空間就分多大吧,多多益善。
第二步:建立一個Linux的編譯環境
在虛擬機中安裝Ubuntu以後(在安裝Ubuntu的時候,建議斷開網絡,或者是在連網下載東西的時候,選擇skip跳過,這樣安裝的快一些,我用的最新的ubuntu11.10),接下來:
安裝JDK
一般ubuntu安裝好後自帶有openJDK,這裏我們需要使用的是Sun公司的JDK,但是Sun JDK不再ubuntu的軟件源裏麵,為了下載到它,需要增加一個軟件源地址,對於到底用JDK5還是用JDK6呢?官方有做解釋的,JDK6適合於編譯Gingerbread (薑餅)或者更新的版本,就是2.3或者2.3以上的版本吧,對於2.2或者更低版本的,推薦用JDK5 ,這裏我們編譯4.0的,當然就用JDK6了
在終端中運行下麵三句:
$ sudo add-apt-repository "deb https://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
根據提示,一步一步地安裝,記得安裝的時候,會在終端中出來一個提示框,類似於許可協議的,下麵有個確定,但就是點不上,按一下Tab鍵就選中了,直接確定就會安裝,這樣就安裝好了JDK,可以在終端中測試一下,運行
$java -version
如果有相應的版本提示信息的話,就表示安裝成功了。
接下來,如果是32位係統的話,在終端中運行
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
libxml2-utils xsltproc
如果是64位,運行
$ 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
官方推薦用64位的,我當時沒看到,用32位也不會有太大的問題,執行到這步,就已經安裝好了Git和Python,除了JDK,這兩個也是必須的。下麵就要準備下載源碼了。。。
第三步:準備下載Android源代碼
接下來需要安裝、初始化和配置Repo工具
-
安裝Repo
首先確保在你的home目錄下麵有一個bin目錄,如果沒有的話,執行下麵命令:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
然後下載Repo腳本並確保它能夠執行
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
-
初始化配置Repo客戶端
首先創建一個空目錄用來保存工作文件
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
然後初始化Repo
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
第四步:開始下載Androd源文件
$ repo sync
這是一個很漫長的過程,等吧,如果發現屏幕卡住了,沒動了,而且也沒有流量顯示,或者感覺不到在下載,類似於這種
建議中斷一下(按ctrl + z),然後重新執行第三步(repo sync),這時你會看到會有下載信息。第一次執行repo sync的時候,可能會有錯誤提示,記不清楚了,百度一下也會出來,重新運行一下repo sync命令就行了。。。
目前我正在下載中,等吧
經過半天加一晚上的下載,今天早上終於下載完了(期間經常下載著就沒有速度了,感覺不是網絡的問題,可能是服務器不穩定造成的。我的處理辦法就是先按ctrl+z中斷,然後執行repo sync,就又恢複正常下載了。。。)如圖:
剛看了一下,有7G。接下來就準備編譯吧。
編譯源碼 下載完源碼後進入源碼主目錄
1 :執行:
$ source build/envsetup.sh
souce命令執行的是源碼包build目錄下的envsetup文件
可以看出這個文件裏定義了很多函數供編譯使用
function help() function get_abs_build_var() function get_build_var() function check_product() function check_variant() function setpaths() function printconfig() function set_stuff_for_environment() function set_sequence_number() function settitle() function choosetype() function chooseproduct() function choosevariant() function tapas() function choosecombo() function print_lunch_menu() function lunch() function gettop function m() function findmakefile() function mm() function mmm() function croot() function pid() function gdbclient() function jgrep() function cgrep() function resgrep() function getprebuilt function tracedmdump() function runhat() function getbugreports() function startviewserver() function stopviewserver() function isviewserverstarted() function smoketest() function runtest() function runtest_py() function godir ()
2:選擇一個target
$ lunch full-eng
我們編譯後在模擬器中運行,所以選擇full
我們選擇最大的權限,也就是root後的版本,所以選擇eng
3:編譯源碼
$ make -j4
過程大概3小時
編譯完後在源碼目錄下會生成out文件夾如圖
好了,可以檢驗以下我們編譯的源碼是否正常運行了
$ emulator
如果提示找不到命令,請初始化環境
$ source build/envsetup.sh $ lunch full-eng
ok,android源碼順利完成,明天進行內核的編譯
最後更新:2017-04-02 00:06:51