[Android] Ubuntu下Android源碼編譯

安裝Ubuntu

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

配置虛擬機(jī)共享文件夾

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

Paste_Image.png

此設(shè)置需要在關(guān)閉Ubuntu虛擬機(jī)的情況下設(shè)置。設(shè)置完成之后,打開Ubuntu系統(tǒng)發(fā)現(xiàn)沒有權(quán)限去訪問這個(gè)共享文件夾,解決方案是把當(dāng)前用戶加到一個(gè)叫vboxsf的組中,執(zhí)行指令

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

掛載的共享文件夾在/media

Paste_Image.png

這里本人使用了SecureCRTSSH遠(yuǎn)程連接了Ubuntu

sudo apt-get install openssh-server // 安裝SSH服務(wù)

安裝必要的工具

1、git版本控制工具

sudo apt-get install git

配置git

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

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

sudo apt-get install curl

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

mkdir ~/bin

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

PATH=$PATH:~/bin

下載repo

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

添加可執(zhí)行權(quán)限

chmod a+x ~/bin/repo

使用repo下載Android系統(tǒng)源碼

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

mkdir android && cd android

初始化工作目錄,默認(rèn)為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可查看網(wǎng)址
https://source.android.com/source/build-numbers.html#source-code-tags-and-builds [需要翻墻]

附上一些較新的系統(tǒng)分支

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,可以執(zhí)行一下指令

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

如果在初始化的時(shí)候遇到以下問題

Paste_Image.png

這是一個(gè)Virtual Box為了安全禁止了鏈接的錯(cuò)誤,解決方案如下,請(qǐng)?jiān)陉P(guān)閉虛擬機(jī)的情況下進(jìn)行,
Windows 下cmd進(jìn)入到Virtual Box的安裝目錄
Paste_Image.png

鍵入

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

<YOURVMNAME> = 虛擬機(jī)的名字
<YOURSHAREFOLDERNAME> = 設(shè)置共享的名字
請(qǐng)注意大小寫,例如


Paste_Image.png

Paste_Image.png

Paste_Image.png

設(shè)置完成后,查看有沒有設(shè)置成功

VBoxManage getextradata <YOURVMNAME>  enumerate  

Paste_Image.png

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

2、下拉代碼

repo sync 

repo sync 下載最新本地工作文件,同步 repository 中的代碼。 可以指定需要更新的project , 如果不指定任何參數(shù),會(huì)同步整個(gè)所有的項(xiàng)目。如果是第一次運(yùn)行 repo sync, 則這個(gè)命令相當(dāng)于 git clone,會(huì)把 repository 中的所有內(nèi)容都拷貝到本地。如果不是第一次運(yùn)行 repo sync, 則相當(dāng)于 更新和自動(dòng)合并動(dòng)作,repo sync 會(huì)更新 .repo 下面的文件。 如果在merge 的過程中出現(xiàn)沖突, 這需要手動(dòng)運(yùn)行 git rebase --continue

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

#!/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后面可以加個(gè)-j<數(shù)字>參數(shù)來加快倉庫克隆,如:

repo sync -j8 // 默認(rèn)是4

同步時(shí)間因人而異,我大概掛了兩三個(gè)小時(shí)

構(gòu)建編譯環(huán)境

對(duì)于Gingerbread (2.3.x)之后的系統(tǒng)需要64位的操作系統(tǒng),老的系統(tǒng)可以在32為的機(jī)器上編譯
1、安裝JDK
每個(gè)Android系統(tǒng)對(duì)于JDK的要求是不一樣的,當(dāng)前Android Open Source Project (AOSP)master分支上需要Java 8,在Ubuntu上可以安裝OpenJDK。
其他分支對(duì)于JDK的要求 Java JDK:
Java 7: for Lollipop through Marshmallow
Java 6: for Gingerbread through KitKat
Java 5: for Cupcake through Froyo
這里已編譯KitKat為例,下載JDK6,由于官網(wǎng)下載需要填寫賬號(hào)信息,因此這里給出一個(gè)百度云的鏈接 http://pan.baidu.com/s/1nuo3XNj 下載完成后,記得添加到環(huán)境變量

2、 下載編譯所需工具
Ubuntu系統(tǒng)版本是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、設(shè)置編譯環(huán)境變量
初始化環(huán)境變量

source build/envsetup.sh

或者

. build/envsetup.sh

2、選擇編譯目標(biāo)

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的核心數(shù)乘以2> 如:make -j8

經(jīng)過漫長的編譯時(shí)間

5、模擬器運(yùn)行
直接在控制臺(tái)運(yùn)行,在編譯的工程中此命令或自動(dòng)添加到環(huán)境變量中

emulator

模擬器運(yùn)行起來后,即可看到剛編譯好的image

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容