[Android] Ubuntu下Android源碼編譯

安裝Ubuntu

本人使用的windows系統,因此使用Oracle VM Virtual Box虛擬機安裝Ubuntu系統,Ubuntu系統本人選擇的是Ubuntu14.04。
1、下載Oracle VM Virtual Box https://www.virtualbox.org/wiki/Downloads 根據各自的系統下載對應的版本。
2、下載Ubuntu系統 http://www.ubuntu.com/download/desktop 本人選擇的是 Ubuntu 14.04.4 LTS 64bit。
3、如何使用Oracle VM Virtual Box安裝Ubuntu,本人就不在做過多的贅述了,不明白者請查詢相關資料。

配置虛擬機共享文件夾

爲了使下載的Android源代碼能在Windows中使用SourceInsight打開,所以需要創建Windows共享文件夾,在Ubuntu中讓源代碼下載在共享文件夾中,或者讓Ubuntu共享代碼下載的文件夾,在Windows中訪問。本文以第一種方式爲例闡述。

Paste_Image.png

此設置需要在關閉Ubuntu虛擬機的情況下設置。設置完成之後,打開Ubuntu系統發現沒有權限去訪問這個共享文件夾,解決方案是把當前用戶加到一個叫vboxsf的組中,執行指令

sudo usermod -a -G vboxsf <你的用戶名>

掛載的共享文件夾在/media

Paste_Image.png

這裏本人使用了SecureCRTSSH遠程連接了Ubuntu

sudo apt-get install openssh-server // 安裝SSH服務

安裝必要的工具

1、git版本控制工具

sudo apt-get install git

配置git

git config --global user.email "<你的郵箱>"
git config --global user.name "<你的名字>"

2、curl,官方一點的說法就是開源的文件傳輸工具。類似迅雷,或者wget

sudo apt-get install curl

3、 安裝repo,Android使用Git作爲代碼管理工具,開發了Gerrit進行代碼審覈以便更好的對代碼進行集中式管理,還開發了Repo命令行工具,對Git部分命令封裝,將百多個Git庫有效的進行組織。
新建一個bin目錄

mkdir ~/bin

~/bin目錄添加到PATH中,編輯.bashrc在最後添加

PATH=$PATH:~/bin

下載repo

curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > ~/bin/repo

添加可執行權限

chmod a+x ~/bin/repo

使用repo下載Android系統源碼

1、cd到共享文件夾
新建一個文件夾存放Android源碼

mkdir android && cd android

初始化工作目錄,默認爲master 分支

repo init -u  git://mirrors.ustc.edu.cn/aosp/platform/manifest

初始化工作目錄,並指定分支

repo init -u  git://mirrors.ustc.edu.cn/aosp/platform/manifest -b <branch>

branch可查看網址
https://source.android.com/source/build-numbers.html#source-code-tags-and-builds [需要翻牆]

附上一些較新的系統分支

Build Branch Version
M5C14J android-6.0.1_r31 Marshmallow
LMY49J android-5.1.1_r37 Lollipop
KTU84Q android-4.4.4_r2 KitKat

如果想下拉並切換到Android 4.4.4,可以執行一下指令

repo init -u  git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.4.4_r2

如果在初始化的時候遇到以下問題

Paste_Image.png

這是一個Virtual Box爲了安全禁止了鏈接的錯誤,解決方案如下,請在關閉虛擬機的情況下進行,
Windows 下cmd進入到Virtual Box的安裝目錄
Paste_Image.png

鍵入

VBoxManage setextradata <YOURVMNAME> VBoxInternal2/SharedFoldersEnableSymlinksCreate/<YOURSHAREFOLDERNAME> 1

<YOURVMNAME> = 虛擬機的名字
<YOURSHAREFOLDERNAME> = 設置共享的名字
請注意大小寫,例如


Paste_Image.png

Paste_Image.png

Paste_Image.png

設置完成後,查看有沒有設置成功

VBoxManage getextradata <YOURVMNAME>  enumerate  

Paste_Image.png

初始化之後,目錄下面多了一個.repo隱藏文件夾,查看其初始大小
Paste_Image.png

2、下拉代碼

repo sync 

repo sync 下載最新本地工作文件,同步 repository 中的代碼。 可以指定需要更新的project , 如果不指定任何參數,會同步整個所有的項目。如果是第一次運行 repo sync, 則這個命令相當於 git clone,會把 repository 中的所有內容都拷貝到本地。如果不是第一次運行 repo sync, 則相當於 更新和自動合併動作,repo sync 會更新 .repo 下面的文件。 如果在merge 的過程中出現衝突, 這需要手動運行 git rebase --continue

防止中途人離開出錯,可以使用以下腳本

#!/bin/bash
echo "======start repo sync======"
repo sync
while [ $? == 1 ]; do
  echo "======sync failed, re-sync again======"
  sleep 3
  repo sync -j4
done

repo sync後面可以加個-j<數字>參數來加快倉庫克隆,如:

repo sync -j8 // 默認是4

同步時間因人而異,我大概掛了兩三個小時

構建編譯環境

對於Gingerbread (2.3.x)之後的系統需要64位的操作系統,老的系統可以在32爲的機器上編譯
1、安裝JDK
每個Android系統對於JDK的要求是不一樣的,當前Android Open Source Project (AOSP)master分支上需要Java 8,在Ubuntu上可以安裝OpenJDK。
其他分支對於JDK的要求 Java JDK:
Java 7: for Lollipop through Marshmallow
Java 6: for Gingerbread through KitKat
Java 5: for Cupcake through Froyo
這裏已編譯KitKat爲例,下載JDK6,由於官網下載需要填寫賬號信息,因此這裏給出一個百度雲的鏈接 http://pan.baidu.com/s/1nuo3XNj 下載完成後,記得添加到環境變量

2、 下載編譯所需工具
Ubuntu系統版本是14.04的,具體的版本需要安裝哪些工具可以查詢 https://source.android.com/source/initializing.html

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

正式編譯

1、設置編譯環境變量
初始化環境變量

source build/envsetup.sh

或者

. build/envsetup.sh

2、選擇編譯目標

lunch aosp_arm-eng

類型說明

user          limited access; suited for production
userdebug     like "user" but with root access and debuggability; preferred for debugging
eng         development configuration with additional debugging tools

3、使用ccache
加快編譯的東西,建議大小 50-100G

export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

4、編譯

make -j<你CPU的核心數乘以2> 如:make -j8

經過漫長的編譯時間

5、模擬器運行
直接在控制檯運行,在編譯的工程中此命令或自動添加到環境變量中

emulator

模擬器運行起來後,即可看到剛編譯好的image

官方編譯教程 https://source.android.com/source/index.html [需翻牆]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章