Android系統(tǒng)源代碼的下載與編譯

目錄

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.鏡像同步源代碼

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ā)》

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

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

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