Android平臺(tái)架構(gòu)介紹和源碼下載

本篇文章為Android源碼學(xué)習(xí)的第一章西剥,主要講述Android平臺(tái)架構(gòu)的分層渗磅,以及如何下載Android源碼旗扑。

Android平臺(tái)架構(gòu)介紹

Android 是一種基于 Linux 的開放源代碼軟件棧殊校,為廣泛的設(shè)備和機(jī)型而創(chuàng)建芦疏。下圖所示為 Android 平臺(tái)的主要組件肢预。


image

從上圖可以看出矛洞,Android系統(tǒng)大體可以分為6個(gè)層次,從下往上依次是:

  1. Linux內(nèi)核層:Android 平臺(tái)的基礎(chǔ)是 Linux 內(nèi)核。例如沼本,Android Runtime (ART) 依靠 Linux 內(nèi)核來執(zhí)行底層功能噩峦,例如線程和低層內(nèi)存管理。使用 Linux 內(nèi)核可讓 Android 利用主要安全功能抽兆,并且允許設(shè)備制造商為著名的內(nèi)核開發(fā)硬件驅(qū)動(dòng)程序识补。
  2. 硬件抽象層 (HAL):硬件抽象層 (HAL) 提供標(biāo)準(zhǔn)界面,向更高級(jí)別的 Java API 框架顯示設(shè)備硬件功能辫红。HAL 包含多個(gè)庫模塊凭涂,其中每個(gè)模塊都為特定類型的硬件組件實(shí)現(xiàn)一個(gè)界面,例如相機(jī)或藍(lán)牙模塊贴妻。當(dāng)框架 API 要求訪問設(shè)備硬件時(shí)切油,Android 系統(tǒng)將為該硬件組件加載庫模塊。
  3. Android Runtime:對(duì)于運(yùn)行 Android 5.0(API 級(jí)別 21)或更高版本的設(shè)備名惩,每個(gè)應(yīng)用都在其自己的進(jìn)程中運(yùn)行澎胡,并且有其自己的 Android Runtime (ART) 實(shí)例。ART 編寫為通過執(zhí)行 DEX 文件在低內(nèi)存設(shè)備上運(yùn)行多個(gè)虛擬機(jī)娩鹉,DEX 文件是一種專為 Android 設(shè)計(jì)的字節(jié)碼格式攻谁,經(jīng)過優(yōu)化,使用的內(nèi)存很少弯予。編譯工具鏈(例如 Jack)將 Java 源代碼編譯為 DEX 字節(jié)碼巢株,使其可在 Android 平臺(tái)上運(yùn)行。

ART 的部分主要功能包括:

  • 預(yù)先 (AOT) 和即時(shí) (JIT) 編譯
  • 優(yōu)化的垃圾回收 (GC)
  • 更好的調(diào)試支持熙涤,包括專用采樣分析器阁苞、詳細(xì)的診斷異常和崩潰報(bào)告,并且能夠設(shè)置監(jiān)視點(diǎn)以監(jiān)控特定字段

在 Android 版本 5.0(API 級(jí)別 21)之前祠挫,Dalvik 是 Android Runtime那槽。如果您的應(yīng)用在 ART 上運(yùn)行效果很好,那么它應(yīng)該也可在 Dalvik 上運(yùn)行等舔,但反過來不一定骚灸。
Android 還包含一套核心運(yùn)行時(shí)庫,可提供 Java API 框架使用的 Java 編程語言大部分功能慌植,包括一些 Java 8 語言功能甚牲。

  1. 原生 C/C++ 庫:許多核心 Android 系統(tǒng)組件和服務(wù)(例如 ART 和 HAL)構(gòu)建自原生代碼,需要以 C 和 C++ 編寫的原生庫蝶柿。Android 平臺(tái)提供 Java 框架 API 以向應(yīng)用顯示其中部分原生庫的功能丈钙。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES交汤,以支持在應(yīng)用中繪制和操作 2D 和 3D 圖形雏赦。
    如果開發(fā)的是需要 C 或 C++ 代碼的應(yīng)用,可以使用 Android NDK 直接從原生代碼訪問某些原生平臺(tái)庫。
  2. Java API 框架:您可通過以 Java 語言編寫的 API 使用 Android OS 的整個(gè)功能集星岗。這些 API 形成創(chuàng)建 Android 應(yīng)用所需的構(gòu)建塊填大,它們可簡化核心模塊化系統(tǒng)組件和服務(wù)的重復(fù)使用,包括以下組件和服務(wù):
  • 豐富俏橘、可擴(kuò)展的視圖系統(tǒng)允华,可用以構(gòu)建應(yīng)用的 UI,包括列表寥掐、網(wǎng)格靴寂、文本框、按鈕甚至可嵌入的網(wǎng)絡(luò)瀏覽器
  • 資源管理器曹仗,用于訪問非代碼資源榨汤,例如本地化的字符串蠕搜、圖形和布局文件
  • 通知管理器怎茫,可讓所有應(yīng)用在狀態(tài)欄中顯示自定義提醒
  • Activity 管理器,用于管理應(yīng)用的生命周期妓灌,提供常見的導(dǎo)航返回棧
  • 內(nèi)容提供程序轨蛤,可讓應(yīng)用訪問其他應(yīng)用(例如“聯(lián)系人”應(yīng)用)中的數(shù)據(jù)或者共享其自己的數(shù)據(jù)

開發(fā)者可以完全訪問 Android 系統(tǒng)應(yīng)用使用的框架 API。

  1. 系統(tǒng)應(yīng)用:Android 隨附一套用于電子郵件虫埂、短信祥山、日歷、互聯(lián)網(wǎng)瀏覽和聯(lián)系人等的核心應(yīng)用掉伏。平臺(tái)隨附的應(yīng)用與用戶可以選擇安裝的應(yīng)用一樣缝呕,沒有特殊狀態(tài)。因此第三方應(yīng)用可成為用戶的默認(rèn)網(wǎng)絡(luò)瀏覽器斧散、短信 Messenger 甚至默認(rèn)鍵盤(有一些例外供常,例如系統(tǒng)的“設(shè)置”應(yīng)用)。
    系統(tǒng)應(yīng)用可用作用戶的應(yīng)用鸡捐,以及提供開發(fā)者可從其自己的應(yīng)用訪問的主要功能栈暇。例如,如果您的應(yīng)用要發(fā)短信箍镜,您無需自己構(gòu)建該功能源祈,可以改為調(diào)用已安裝的短信應(yīng)用向您指定的接收者發(fā)送消息。

從上圖可以將Android平臺(tái)劃分為兩層色迂,一層是由C/C++編寫的香缺,可以稱為Native層。另一層是由Java編寫的歇僧,可以稱為Framework層赫悄。這兩層之間的聯(lián)系是通過JNI進(jìn)行連接。

Android源碼下載

了解了Android平臺(tái)架構(gòu)之后,作為開發(fā)者學(xué)習(xí)源碼埂淮,需要下載其源代碼姑隅。在下載源代碼之前,需要了解AOSP這個(gè)概念倔撞,AOSP是Android Open Source Project(Androi開源項(xiàng)目)的縮寫讲仰,如果可以翻墻的話,可以按照AOSP官網(wǎng) https://source.android.com/setup/downloading 這個(gè)地址上的步驟進(jìn)行源碼下載痪蝇,如果不具備翻墻的條件鄙陡,可以在清華大學(xué)開源軟件鏡像站 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 進(jìn)行下載。步驟如下:

安裝 Repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可訪問躏啰,可以用下面的:
## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo

建立工作目錄

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

初始化倉庫

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
## 如果提示無法連接到 gerrit.googlesource.com趁矾,可以編輯 ~/bin/repo,把 REPO_URL 一行替換成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
## 如果需要某個(gè)特定的Android版本给僵,則使用repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-7.1.0_r1

同步源碼樹(以后只需執(zhí)行這條命令來同步)

repo sync

如果中間有網(wǎng)絡(luò)斷開的情況毫捣,則只需要執(zhí)行repo sync繼續(xù)同步即可。直到下載完Android源碼帝际。

相關(guān)鏈接

Android官方文檔
AOSP官網(wǎng)
清華大學(xué)AOSP鏡像地址
中國科學(xué)技術(shù)大學(xué)開源軟件鏡像服務(wù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔓同,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹲诀,更是在濱河造成了極大的恐慌斑粱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脯爪,死亡現(xiàn)場離奇詭異则北,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痕慢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門尚揣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人守屉,你說我怎么就攤上這事惑艇。” “怎么了拇泛?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵滨巴,是天一觀的道長。 經(jīng)常有香客問我俺叭,道長恭取,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任熄守,我火速辦了婚禮蜈垮,結(jié)果婚禮上耗跛,老公的妹妹穿的比我還像新娘。我一直安慰自己攒发,他們只是感情好调塌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惠猿,像睡著了一般羔砾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偶妖,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天姜凄,我揣著相機(jī)與錄音,去河邊找鬼趾访。 笑死态秧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扼鞋。 我是一名探鬼主播申鱼,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼藏鹊!你這毒婦竟也來了润讥?” 一聲冷哼從身側(cè)響起转锈,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤盘寡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撮慨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竿痰,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年砌溺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了影涉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡规伐,死狀恐怖蟹倾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猖闪,我是刑警寧澤鲜棠,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站培慌,受9級(jí)特大地震影響豁陆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吵护,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一盒音、第九天 我趴在偏房一處隱蔽的房頂上張望表鳍。 院中可真熱鬧,春花似錦祥诽、人聲如沸譬圣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼻忠。三九已至斑唬,卻和暖如春善炫,著一層夾襖步出監(jiān)牢的瞬間尼酿,已是汗流浹背蛔钙。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工去件, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笨农,地道東北人就缆。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像谒亦,于是被迫代替她去往敵國和親竭宰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,524評(píng)論 25 707
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,693評(píng)論 0 3
  • [TOC] 以下內(nèi)容基于Android 8.0 Project Treble Project treble是And...
    Joe_HUST閱讀 3,114評(píng)論 0 1
  • 文/頹然書生 徐州八卦門陸平泰老拳師的兒子陸云份招,與修楓的遠(yuǎn)房表妹胡清兒自幼相識(shí)切揭,青梅竹馬,情投意合锁摔,最近二人之間卻...
    頹然書生閱讀 349評(píng)論 1 11
  • 元認(rèn)知是一種反思自己思考過程能力廓旬,是你如何去學(xué)習(xí)你想要學(xué)習(xí)的知識(shí). 1『內(nèi)心記者』想象元認(rèn)知是內(nèi)心的記者,向自己提...
    賣藝的小青年Ace劍心閱讀 270評(píng)論 3 1