目錄
- 1.簡介
- 2.官方同步源代碼
- 3.鏡像同步源代碼
- 4.已有源代碼更新
-
5.編譯源代碼
- [5.1編譯Android 4.1.2](#5.1編譯Android 4.1.2)
- [5.2編譯Android 5.1.1](#5.1編譯Android 5.1.1)
- 6.參考
1.簡介
之前二次開發(fā)Launcher的時候有同步過官方Android 4.1.2的源代碼,遺憾當(dāng)時沒有記錄下載過程,現(xiàn)在重新溫習(xí)一下,其實(shí)也比較簡單。
2.官方同步源代碼
官網(wǎng)網(wǎng)址 需要翻墻
2.1新建一個用于存放下載腳本文件的目錄
mkdir ~/bin
PATH=~/bin:$PATH
2.2下載Repo腳本文件
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
2.3創(chuàng)建用于存放Android源代碼的目錄
mkdir android_source
cd android_source
2.4初始化
repo init -u https://android.googlesource.com/platform/manifest
上述命令會要求Repo下載最新的Android源代碼,也就是master分支,如果想下載其他分支
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
2.5同步Android源代碼
repo sync
下載過程保持網(wǎng)絡(luò)通暢,筆者網(wǎng)絡(luò)較慢,同步了快一整天。
3.鏡像同步源代碼
- 對于沒有翻墻的用戶,可以使用清華大學(xué)的鏡像。
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
3.1.1 同上述步驟,新建一個用于存放下載腳本文件的目錄
mkdir ~/bin
PATH=~/bin:$PATH
3.1.2 下載Repo
git clone https://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/
cp git-repo/repo ~/bin/
3.1.3 修改Repo文件
~/bin/repo
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改為
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
3.1.4 創(chuàng)建用于存放Android源代碼的目錄
mkdir android_source
cd android_source
3.1.5 同步源代碼
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
repo sync -j4
- 由于首次同步需要下載 24GB 數(shù)據(jù),過程中任何網(wǎng)絡(luò)故障都可能造成同步失敗,建議直接使用初始化包進(jìn)行初始化。
3.2.1下載初始包
#下載重試不限次數(shù),防止網(wǎng)絡(luò)異常中斷
wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
tar -vxzf aosp-latest.tar
cd aosp
#這時ls的話什么也看不到,因?yàn)橹挥幸粋€隱藏的.repo目錄
repo sync
3.2.2選擇版本同步
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
repo sync -j4
下載好了就是下圖

源代碼目錄含義:
| 目錄名 | 描述 |
|---|---|
| abi | 應(yīng)用程序二進(jìn)制接口 |
| bionic | C/C++運(yùn)行時庫,在NDK程序中很大一部分調(diào)用就是這里的程序 |
| bootable | 用于Android裝載和啟動程序,其中就包括bootloader和recovery。bootloader是Android中唯一在LInux內(nèi)核之前執(zhí)行的程序。通過這段程序可以初始化硬件,建立內(nèi)存控件的映射圖等,總之,bootloader就是為LInux內(nèi)核準(zhǔn)備合適的運(yùn)行環(huán)境。 |
| build | 用于編譯Android源代碼以及建議system.img,ramdisk.img等文件的工具 |
| cts | 用于兼容性測試的工具 |
| dalvik | Dalvik虛擬機(jī)的源代碼 |
| development | 高層的開發(fā)和調(diào)試工具 |
| device | 與設(shè)備相關(guān)的代碼 |
| docs | 包含與Android源代碼項(xiàng)目的文檔和工具,如Dalvik虛擬機(jī)格式文檔等 |
| external | 擴(kuò)展工具的源代碼 |
| framworks | Android框架層源代碼。也就是Android SDK的源代碼 |
| hardware | 硬件層接口和庫 |
| libcore | Java核心庫 |
| ndk | NDK相關(guān)的源代碼 |
| packages | 與Android系統(tǒng)一同發(fā)布的應(yīng)用程序的源代碼 |
| prebuilts | Android在各種平臺下編譯之前要使用的工具 |
| sdk | 在開發(fā)環(huán)境中使用的工具,如ddms,draw9path,sdkmanager等 |
| system | Android的基本系統(tǒng) |
注意:
查看所有分支
cd .repo/manifests
git branch -a

如果想切換到其它分支可以重新執(zhí)行
repo init -b android-6.0.1_r63
repo sync
4.已有源代碼更新
如果手上已有Android系統(tǒng)源代碼,可以通過代理遠(yuǎn)程更新,不過速度可能會比較慢。另外還可以
4.1修改~/bin/repo文件
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改為
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
4.2修改源代碼目錄.repo/manifests.git/config
url = https://android.googlesource.com/platform/manifest
改為
url = https://aosp.tuna.tsinghua.edu.cn/platform/manifest
4.3修改源代碼目錄.repo/manifest.xml
<manifest>
<remote name="aosp"
- fetch="https://android.googlesource.com"
+ fetch="https://aosp.tuna.tsinghua.edu.cn"
review="android-review.googlesource.com" />
<remote name="github"
最后直接同步即可
repo sync -j4
5.1編譯Android 4.1.2
筆者下載的是Android 4.1.2源代碼。
默認(rèn)的源代碼僅能在64位機(jī)器上編譯。編譯過程有很多坑,要有心里準(zhǔn)備。
5.1.1進(jìn)入源碼目錄初始化編譯環(huán)境
source build/envsetup.sh
5.1.2選擇目標(biāo)
lunch full-eng
設(shè)置編譯目標(biāo)為full-eng,表示正對所有的移動設(shè)備,Android模擬器有效,并打開所有的調(diào)試選項(xiàng)。
只執(zhí)行l(wèi)unch命令,會出現(xiàn)對應(yīng)的選項(xiàng)

5.1.3編譯Android源代碼
make命令只會利用一個CPU核進(jìn)行編譯,如果是多核CPU,為了縮短時間,可以加上-jn參數(shù)。
注意:
#Android 4.1.2源代碼編譯要求
筆記本OS: Ubuntu 16.04 x64
GNU Make版本: 3.8.1或者3.8.2(筆者用的是3.8.2)
JDK 版本: JDK 1.6
編譯過程你很可能會碰到如下問題
1. /bin/bash: xsltproc: 未找到命令
2. /bin/bash: flex: 未找到命令
3. /bin/bash: bison: 未找到命令
4. sh: 1: gperf: not found
5. /bin/bash: xmllint: 未找到命令
6. failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 2
7. /usr/include/stdlib.h:759:34: fatal error: bits/stdlib-bsearch.h: No such file or directory
建議提前安裝好下列必要依賴
sudo apt-get install xsltproc flex bison gperf libxml2-utils libswitch-perl gcc-multilib
最后開始編譯
make -j4
筆者筆記本編譯花了接近3個小時

5.2編譯Android 5.1.1
源代碼的下載參考上述步驟
環(huán)境配置
#公司的臺式機(jī)
本機(jī)OS: Ubuntu 14.04 x64
JDK版本: openjdk 1.7
配置過程同上,編譯過程中如果出現(xiàn)
You asked for an OpenJDK 7 build but your version is
java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode).
建議更換JDK為openjdk 1.7
apt-get install openjdk-7-jdk
如果出現(xiàn)
/bin/bash: build/tools/findleaves.py: 權(quán)限不夠
直接給文件加上執(zhí)行權(quán)限,筆者是直接在源碼目錄
chmod a+x -R *
筆者編譯完大概也是3個多小時,過程跟4.12編譯差不多

啟動模擬器
emulator &
如圖

注意:幾個很有用的命令。
make -k 繼續(xù)編譯
m 編譯完整的Android源代碼
mm 此命令必須進(jìn)入指定的工程的目錄進(jìn)行編譯
mmm 可以在任何一級目錄編譯任意指定的工程
注意:
同步出現(xiàn)如下錯誤
error: .repo/repo/: contains uncommitted changes
進(jìn)入相關(guān)目錄commit一次,然后pull更新一下即可。
6.參考
https://source.android.com/source/downloading.html
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
http://blog.csdn.net/michaelpp/article/details/22801953
http://blog.csdn.net/ambulong/article/details/51627115
《Android 深度探索(卷1):HAL與驅(qū)動開發(fā)》