安裝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中訪問。本文以第一種方式為例闡述教寂。
此設(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
下
這里本人使用了
SecureCRT
SSH遠(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í)候遇到以下問題
這是一個(gè)Virtual Box為了安全禁止了鏈接的錯(cuò)誤小压,解決方案如下砰左,請(qǐng)?jiān)陉P(guān)閉虛擬機(jī)的情況下進(jìn)行,
Windows 下
cmd
進(jìn)入到Virtual Box的安裝目錄鍵入
VBoxManage setextradata <YOURVMNAME> VBoxInternal2/SharedFoldersEnableSymlinksCreate/<YOURSHAREFOLDERNAME> 1
<YOURVMNAME> = 虛擬機(jī)的名字
<YOURSHAREFOLDERNAME> = 設(shè)置共享的名字
請(qǐng)注意大小寫场航,例如
設(shè)置完成后缠导,查看有沒有設(shè)置成功
VBoxManage getextradata <YOURVMNAME> enumerate
初始化之后,目錄下面多了一個(gè)
.repo
隱藏文件夾溉痢,查看其初始大小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 [需翻墻]