Android 原始碼的下載和編譯環境的安裝及編譯

心鑫發表於2014-04-07


1、 原始碼的下載

原始碼的下載,首先需要安裝以下工具軟體:curl 和 git-core

1.1安裝curl:

開啟終端,可以使用按Ctrl+Alt +T的快捷方式開啟終端

在終端中執行命令:sudo apt-get install curl

1.2安裝git-core

1.2.1在使用者目錄下新建bin目錄

在終端中執行:mkdir ~/bin

1.2.2安裝git-core

在終端中執行:curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

給repo執行許可權:chmod a+x ~/bin/repo

注:若是下載repo失敗可以到我百度網盤中去下載,下面給出連結:

http://pan.baidu.com/share/link?shareid=3522233410&uk=4278685087

將~/bin新增環境變數,作用是:git軟體下載安裝在此目錄,在別的目錄執行可能提示出錯:會找不到此軟體。

在終端中執行命令:PATH=~/bin:$PATH

1.3 下載原始碼

1.3.1進入要原始碼將要儲存的目錄

如我的原始碼儲存在:、/opt/android4.3

在終端中執行:cd /opt/android4.3 進入到android4.3目錄中

1.3.2 下載原始碼

對於下載不同版本的android,指定一個manifest分支(即只指明android對應的版本),使用-b引數(即下載某個版本的原始碼),目前關於Android 4.3的原始碼有以下分支:我們可以選擇自己需要下載的:

  * [new branch]      android-4.3_r0.9 -> origin/android-4.3_r0.9

 * [new branch]      android-4.3_r0.9.1 -> origin/android-4.3_r0.9.1

 * [new branch]      android-4.3_r1 -> origin/android-4.3_r1

 * [new branch]      android-4.3_r2 -> origin/android-4.3_r2

* [new branch]      android-4.3_r2.1 -> origin/android-4.3_r2.1

我們選擇下載最新的原始碼,具體命令:

~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-4.3_r2.1

執行此命令會下載一些檔案到我們電腦中,這條命令的主要作用是初始化我們要下載的原始碼的的一些配置檔案,看到類似下面的提示,表示初始化完成。

repo has been initialized in /opt/android4.3username@user-desktop:/opt/android4.3$ 

初始化完成後,會在/opt/android4.3目錄中生成一個.repo的目錄(此目錄為隱藏屬性的檔案,我們可以在終端中使用ls -la命令,或者在檔案瀏覽器中選擇“檢視”,然後勾選“顯示隱藏檔案”,就可以看到此目錄),此目錄儲存了將要下載的原始碼的相關資訊,下面我們開始下載原始碼

同步獲取原始碼

#~/bin/repo sync

如果中間出現中斷,這個很正常,你可以再次輸入 ~/bin/repo sync 命令來進行下載。

可以寫一個指令碼,當中斷後,又自動開始下載,可以在我網盤中下載此指令碼:reposync

http://pan.baidu.com/share/link?shareid=3522233410&uk=4278685087

把reposync指令碼放在你原始碼的目錄,執行./reposync命令就可以了。

根據網速的不同,下載時間也有快慢,最好在睡覺前或下班後下載程式碼,由於原始檔比較大,一般國內都要5小時左右甚至更久。

若是出現以下資訊,表示程式碼以下載完成:

Fetching projects: 100% (166/166), done.  

Syncing work tree: 100% (165/165), done.

原始碼下載完成後,/opt/android4.3資料夾的大小為20G左右,其中.repo有10 G+。

執行~/bin/repo sync 還可以重新校對下載的原始碼,若是有問題或遺漏了一些檔案會重新下載,並從.repo目錄中匯出到實際原始碼中

注:此步可能會出現下載錯誤,請檢視本文最後部分的說明

2、編譯環境的搭建

首先若是沒有修改源,請修改為國內的源,從而提高軟體的下載安裝的速度

可以參考下面部落格的內容新增一些速度快的源,如:臺灣源、Ubuntu官方上海源、網易、搜狐、

http://hi.baidu.com/houxn22/item/48f0f7d150657c16d80e4468

安裝編譯所需的軟體

1、 安裝jdk

官方推薦安裝jdk1.6的,現在不支援命令安裝了,只有Oracle官網下載,或者可以在本人百度網盤下面的地址中下載:

http://pan.baidu.com/share/link?shareid=2263608836&uk=4278685087

開啟後選擇jdk-6u45-linux-x64.bin。

安裝完後修改環境變數。

2、 安裝其它一些編譯所需軟體

在終端中執行: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

基本只要安裝以上軟體即可,官方網站上說的其它一些軟體或者設定可以不用理會。

注:此步可能會出現錯誤,請檢視本文最後部分的說明

3、編譯原始碼

3.1編譯初始化:

在終端中執行:

source build/envsetup.sh或:. build/envsetup.sh

3.2選擇編譯目標:

在終端中執行下面的命令:

lunch

之後選擇你要編譯的裝置,選擇後,會初始化編譯的專案的相關檔案。

3.3編譯程式碼:

在終端中執行:make -j4

-j4:表示用四個執行緒來編譯

編譯根據不同機器的配置不同所需時間也有很大差異。

source build/envsetup.sh:載入編譯命令,產生編譯選項
lunch或lunch xxx-yyy:列印編譯選項選單或指定編譯選項,xxx表示產品,yyy表示編譯型別
make:根據lunch選項,編譯Android系統,最後產出為:system.img,ramdisk.img,userdate.img
m:和make命令一樣
mm:從當前目錄下開始向下編譯目標
mmm:指定一個目錄,僅編譯指定目錄下的目標
make snod:只將out/target/product/XXX/system/目錄下的內容打包生成system.img,不會檢查依賴關係
make bootimage:只將out/target/product/XXX/root/目錄下的內容打包生成ramdisk.img


注:gcc  g++降到4.4 版本 gcc -v ,g++ -v檢視當前版本

ubuntu 11.10的gcc版本是4.6.1,版本太高,編譯android時出錯,要把gcc版本改為4.4.6, 4.5的版本據說可以,但沒試過.
通 過gcc -v命令可以發現gcc庫在/usr/lib/gcc/i686-linux-gnu目錄下,該目錄下有當前系統支援的各種版本gcc庫 。在安裝gcc 4.4前該目錄下是沒有4.4目錄的,安裝gcc 4.4後該目錄下就會多出4.4這個目錄,且該4.4目錄下有各種相應庫檔案。
ubuntu 32bit系統下安裝gcc 4.4的最好方法是僅用以下兩條命令,不需要其它命令,否則編譯時可能會出錯。
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
裝完後在/usr/bin目錄下
$ ls -l gcc*
lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
發現gcc 連結到gcc-4.6,  需要將它改為連結到gcc-4.4 :
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
同理
ls -l g++*
lrwxrwxrwx 1 root root      7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
需要將g++連結改為g++-4.4:
sudo mv g++ g++.bak
sudo ln -s g++-4.4 g++

4、執行模擬器

在終端中執行:emulator

執行模擬器可能出現的錯誤,請檢視本文最後部分的說明

問題1:

 You did not specify a virtual device name, and the system
directory could not be found.
If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).
Otherwise, follow the instructions in -help-disk-images to start the emulator

解決1:將emulator所在bin目錄加入到環境變數

export PATH=$PATH:/home/wuyutaott/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/home/wuyutaott/android/out/target/product/generic

如果配置過android_sdk開發的會有衝突,後面設定的就無效了

解決2:或將終端切換到bin目錄下執行emulator
後在任意的目錄執行emulator就可以看到模擬器了,並且當我修改原始碼,模組編譯之後,重新生成system.img發現模擬器展現出來了我程式碼中所作的修改

解決3:

http://blog.csdn.net/mr_raptor/article/details/7958212

中提到的指令碼如run.sh,新增可執行許可權

#!/bin/bash
PWD_PATH=/home/proud/AndroidSource/code
IMG_PATH=$PWD_PATH/out/target/product/generic
export PATH=$PWD_PATH/out/host/linux-x86/sdk/android-sdk_eng.linux_linux-x86/tools:$PATH
export ANDROID_PRODUCT_OUT=$PWD_PATH/out/target/product/generic
export ANDROID_SWT=$PWD_PATH/out/host/linux-x86/framework
$PWD_PATH/out/host/linux-x86/bin/emulator



相關文章