一. 環境準備。python
1. 磁盤空間預留20G左右,內存最好8G,由於一邊要跑主機,一邊要跑虛擬機,內存要求仍是比較高的,這樣纔會比較流暢。linux
2. 可是我是在物理盤上裝得ubuntu, 非虛擬機,4G內存就夠了.android
3. 至於Ubuntu安裝這個就不說了.git
4. 安裝Git工具。Android源代碼採用Git工具來管理,與SVN相比,這是一種分佈式的源代碼管理工具,而SVN是集中式的源代碼管理工具。要安裝Git工具,在Ubuntu上執行如下命令便可:ubuntu
USER-NAME@MACHINE-NAME:~$ sudo apt-get install git-core gnupgcurl
5. 安裝Java SDK。在Ubuntu上執行如下命令:分佈式
USER-NAME@MACHINE-NAME:~$ 工具
sudo add-apt-repository ppa:ferramroberto/javaflex
USER-NAME@MACHINE-NAME:~$
sudo apt-get update
USER-NAME@MACHINE-NAME:~$
sudo apt-get install sun-java6-jre sun-java6-plugin
USER-NAME@MACHINE-NAME:~$
sudo apt-get install sun-java6-jdk
6. 依賴的其它包。在Ubuntu上執行如下命令:
USER-NAME@MACHINE-NAME:~$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
7. 調試工具。在Ubuntu上執行如下命令:
USER-NAME@MACHINE-NAME:~$ sudo apt-get install valgrind
二. 下載Android源代碼工程。
1. 下載repo工具。在Ubuntu上執行如下命令:
USER-NAME@MACHINE-NAME:~$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ./repo
USER-NAME@MACHINE-NAME:~$ chmod 777 repo
USER-NAME@MACHINE-NAME:~$ cp repo /bin/
2. 下載Android最新版本源代碼。在Ubuntu上執行如下命令:
USER-NAME@MACHINE-NAME:~$ mkdir Android
USER-NAME@MACHINE-NAME:~$ cd Android
USER-NAME@MACHINE-NAME:~/Android$ repo init -u https://android.googlesource.com/a/paltform/manifest -b android-2.3.1_r1
USER-NAME@MACHINE-NAME:~/Android$ repo sync
通過漫長的等待(我下載了兩三天)後,就能夠把Android源代碼下載下來了。其間可能還有經歷下載中斷的狀況,這時只要從新執行repo sync就能夠了。
有個問題要說一下,就是下載的戰線拉的很長,因此不免有時候斷網,這個寫一個python程序斷網或者中斷的時候從新繼續下載,在WORKING_DIR目錄下 新建一個down,sh
內容以下所示
若是顯示以下,則說明sync repo 已經完成,源碼已經下好了
這時能夠看到WORKING_DIR目錄下面已經有東西了,沒錯,就是android源碼文件:
三. 編譯Android源代碼。
1. 編譯。在Android目錄下執行如下命令:
固然,能夠在make後面加上 -jn 開幾個線程去make。(n好比我cpu是雙核的 那就寫4)
第一次編譯確定不會成功的,老是在歷經很錯失敗時候,仍是不能成功。。。(坑爹啊=.=)
我想,在輸入make以後,出現的第一個錯誤就是下面這個錯誤了
緣由是由於谷歌默認android編譯是在64位系統上才能編譯的,可是哥哥是32位系統啊,不會再讓我再裝一個吧,很苦逼的呢。別擔憂,所謂上有政策,下有對策嗎,哈哈。那麼就讓咱們看看./build/core/main,mk文件,哈哈 找到了就是這一句:
將 ifneq (64,$(findstring 64,$(build_arch))) 修改爲 ifneq (i686,$(findstring i686,$(build_arch)))
還有幾處要改
找到下列文件:
/external/clearsilver/cgi/Android.mk
/external/clearsilver/cs/Android.mk
/external/clearsilver/java-jni/Android.mk
/external/clearsilver/util/Android.mk
修改LOCAL_CFLAGS和LOCAL_LDFLAGS變量:
# This forces a 64-bit build for Java6
# Change the following two lines for building on a 32-bit system.
# LOCAL_CFLAGS += -m64
# LOCAL_LDFLAGS += -m64
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
好了,這個錯誤解決了以後,咱們還會碰到錯誤的,OK,我就碰到了下面這個問題
就是out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1這個錯誤,在百度上搜了一下,是由於gcc版本過高了。因爲Android對Ubuntu12.04編譯平臺的支持不是很推薦,有些庫的兼容方面會有一下問題,在編譯的過程當中不免會產生一寫錯誤,就好比上面的和圖片中的「_RORTIFY_SOURCE」 這個。因此,要從新下載gcc-4.4
sudo apt-get install gcc-4.4 sudo apt-get install g++-4.4
進入/usr/bin 刪除gcc對gcc-4.6的連接,建立到4.4的連接
cd /usr/bin sudo rm -r gcc sudo ln -s gcc-4.4 gcc sudo rm -r g++ sudo ln -s g++-4.4 g++
OK,這一步完成以後,在繼續make。若是還出錯的話十一下這個命令
sudo apt-get install g++-4.4-multilib #從新安裝一下
好了,就通過漫長的等待吧(本人是make -j4) 編譯了兩個多小時,大概兩個半小時
編譯完成的後提示以下
哈哈,若是你也編譯完成了,那就恭喜你哈。
對了,順便再說一個問題,就是編譯過程當中權限不夠的問題。本人將源碼下載在/usr/local下面,對這裏的文件操做須要root權限的,若是使用sudo來提升權限的話,不少編譯所須要的環境變量就找不到(好比java)。因此,簡單一點就把這個文件夾下全部的文件夾和文件的own變成普通用戶。
sudo chown -hR root /usr/local/androidSource/WORKING_DIR/
這樣就能夠了。