在Ubuntu上下載、編譯和安裝Android源碼

本文一部分參考老羅android之旅java

一. 環境準備。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:~/Androidrepo 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/

    這樣就能夠了。

相關文章
相關標籤/搜索