[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ù)來加快倉(cāng)庫克隆,如:

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)過漫長(zhǎ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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疤祭,隨后出現(xiàn)的幾起案子盼产,更是在濱河造成了極大的恐慌,老刑警劉巖勺馆,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戏售,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡草穆,警方通過查閱死者的電腦和手機(jī)灌灾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悲柱,“玉大人锋喜,你說我怎么就攤上這事⊥慵Γ” “怎么了嘿般?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)涯冠。 經(jīng)常有香客問我博个,道長(zhǎng),這世上最難降的妖魔是什么功偿? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任盆佣,我火速辦了婚禮,結(jié)果婚禮上械荷,老公的妹妹穿的比我還像新娘共耍。我一直安慰自己,他們只是感情好吨瞎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布痹兜。 她就那樣靜靜地躺著,像睡著了一般颤诀。 火紅的嫁衣襯著肌膚如雪字旭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天崖叫,我揣著相機(jī)與錄音遗淳,去河邊找鬼。 笑死心傀,一個(gè)胖子當(dāng)著我的面吹牛屈暗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼养叛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼种呐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弃甥,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤爽室,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后淆攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肮之,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年卜录,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戈擒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艰毒,死狀恐怖筐高,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丑瞧,我是刑警寧澤柑土,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站绊汹,受9級(jí)特大地震影響稽屏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜西乖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一狐榔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧获雕,春花似錦薄腻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至楣颠,卻和暖如春尽纽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背童漩。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工弄贿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睁冬。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓挎春,卻偏偏與公主長(zhǎng)得像看疙,于是被迫代替她去往敵國(guó)和親豆拨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子直奋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容