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

【Android 平臺(tái)架構(gòu)】

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

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

圖 1. Android 軟件棧却汉。

1. 系統(tǒng)應(yīng)用

Android 隨附一套用于電子郵件、短信、日歷昂儒、互聯(lián)網(wǎng)瀏覽和聯(lián)系人等的核心應(yīng)用。平臺(tái)隨附的應(yīng)用與用戶(hù)可以選擇安裝的應(yīng)用一樣委可,沒(méi)有特殊狀態(tài)渊跋。因此第三方應(yīng)用可成為用戶(hù)的默認(rèn)網(wǎng)絡(luò)瀏覽器、短信 Messenger 甚至默認(rèn)鍵盤(pán)(有一些例外着倾,例如系統(tǒng)的“設(shè)置”應(yīng)用)拾酝。

系統(tǒng)應(yīng)用可用作用戶(hù)的應(yīng)用,以及提供開(kāi)發(fā)者可從其自己的應(yīng)用訪(fǎng)問(wèn)的主要功能卡者。例如蒿囤,如果您的應(yīng)用要發(fā)短信,您無(wú)需自己構(gòu)建該功能崇决,可以改為調(diào)用已安裝的短信應(yīng)用向您指定的接收者發(fā)送消息材诽。

2. Java API 框架

您可通過(guò)以 Java 語(yǔ)言編寫(xiě)的 API 使用 Android OS 的整個(gè)功能集。這些 API 形成創(chuàng)建 Android 應(yīng)用所需的構(gòu)建塊嗽桩,它們可簡(jiǎn)化核心模塊化系統(tǒng)組件和服務(wù)的重復(fù)使用岳守,包括以下組件和服務(wù):

  • 豐富、可擴(kuò)展的視圖系統(tǒng)碌冶,可用以構(gòu)建應(yīng)用的 UI湿痢,包括列表、網(wǎng)格扑庞、文本框譬重、按鈕甚至可嵌入的網(wǎng)絡(luò)瀏覽器
  • 資源管理器,用于訪(fǎng)問(wèn)非代碼資源罐氨,例如本地化的字符串臀规、圖形和布局文件
  • 通知管理器,可讓所有應(yīng)用在狀態(tài)欄中顯示自定義提醒
  • Activity 管理器栅隐,用于管理應(yīng)用的生命周期塔嬉,提供常見(jiàn)的導(dǎo)航返回棧
  • 內(nèi)容提供程序,可讓?xiě)?yīng)用訪(fǎng)問(wèn)其他應(yīng)用(例如“聯(lián)系人”應(yīng)用)中的數(shù)據(jù)或者共享其自己的數(shù)據(jù)

開(kāi)發(fā)者可以完全訪(fǎng)問(wèn) Android 系統(tǒng)應(yīng)用使用的框架 API租悄。

3. 原生 C/C++ 庫(kù)

許多核心 Android 系統(tǒng)組件和服務(wù)(例如 ART 和 HAL)構(gòu)建自原生代碼谨究,需要以 C 和 C++ 編寫(xiě)的原生庫(kù)。Android 平臺(tái)提供 Java 框架 API 以向應(yīng)用顯示其中部分原生庫(kù)的功能泣棋。例如胶哲,您可以通過(guò) Android 框架的 Java OpenGL API 訪(fǎng)問(wèn) OpenGL ES,以支持在應(yīng)用中繪制和操作 2D 和 3D 圖形潭辈。

如果開(kāi)發(fā)的是需要 C 或 C++ 代碼的應(yīng)用鸯屿,可以使用 Android NDK 直接從原生代碼訪(fǎng)問(wèn)某些原生平臺(tái)庫(kù)澈吨。

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 編寫(xiě)為通過(guò)執(zhí)行 DEX 文件在低內(nèi)存設(shè)備上運(yùn)行多個(gè)虛擬機(jī),DEX 文件是一種專(zhuān)為 Android 設(shè)計(jì)的字節(jié)碼格式冰肴,經(jīng)過(guò)優(yōu)化屈藐,使用的內(nèi)存很少。編譯工具鏈(例如 Jack)將 Java 源代碼編譯為 DEX 字節(jié)碼熙尉,使其可在 Android 平臺(tái)上運(yùn)行联逻。

ART 的部分主要功能包括:

  • 預(yù)先 (AOT) 和即時(shí) (JIT) 編譯
  • 優(yōu)化的垃圾回收 (GC)
  • 更好的調(diào)試支持,包括專(zhuān)用采樣分析器检痰、詳細(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)行,但反過(guò)來(lái)不一定椎椰。

Android 還包含一套核心運(yùn)行時(shí)庫(kù)厦幅,可提供 Java API 框架使用的 Java 編程語(yǔ)言大部分功能,包括一些 Java 8 語(yǔ)言功能慨飘。

4. 硬件抽象層 (HAL)

硬件抽象層 (HAL) 提供標(biāo)準(zhǔn)界面确憨,向更高級(jí)別的 Java API 框架顯示設(shè)備硬件功能。HAL 包含多個(gè)庫(kù)模塊瓤的,其中每個(gè)模塊都為特定類(lèi)型的硬件組件實(shí)現(xiàn)一個(gè)界面休弃,例如相機(jī)藍(lán)牙模塊。當(dāng)框架 API 要求訪(fǎng)問(wèn)設(shè)備硬件時(shí)圈膏,Android 系統(tǒng)將為該硬件組件加載庫(kù)模塊塔猾。

5. Linux 內(nèi)核

Android 平臺(tái)的基礎(chǔ)是 Linux 內(nèi)核。例如稽坤,Android Runtime (ART) 依靠 Linux 內(nèi)核來(lái)執(zhí)行底層功能丈甸,例如線(xiàn)程和低層內(nèi)存管理。

使用 Linux 內(nèi)核可讓 Android 利用主要安全功能尿褪,并且允許設(shè)備制造商為著名的內(nèi)核開(kāi)發(fā)硬件驅(qū)動(dòng)程序睦擂。


上次更新日期:四月 25, 2018

引用:
平臺(tái)架構(gòu)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茫多,隨后出現(xiàn)的幾起案子祈匙,更是在濱河造成了極大的恐慌忽刽,老刑警劉巖天揖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夺欲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡今膊,警方通過(guò)查閱死者的電腦和手機(jī)些阅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)斑唬,“玉大人市埋,你說(shuō)我怎么就攤上這事∷×酰” “怎么了缤谎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)褐着。 經(jīng)常有香客問(wèn)我坷澡,道長(zhǎng),這世上最難降的妖魔是什么含蓉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任频敛,我火速辦了婚禮,結(jié)果婚禮上馅扣,老公的妹妹穿的比我還像新娘斟赚。我一直安慰自己,他們只是感情好差油,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布拗军。 她就那樣靜靜地躺著,像睡著了一般厌殉。 火紅的嫁衣襯著肌膚如雪食绿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天公罕,我揣著相機(jī)與錄音器紧,去河邊找鬼。 笑死楼眷,一個(gè)胖子當(dāng)著我的面吹牛铲汪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罐柳,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掌腰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了张吉?” 一聲冷哼從身側(cè)響起齿梁,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后勺择,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體创南,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年省核,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稿辙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡气忠,死狀恐怖邻储,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旧噪,我是刑警寧澤吨娜,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站淘钟,受9級(jí)特大地震影響萌壳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日月,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一袱瓮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爱咬,春花似錦尺借、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蜂绎,卻和暖如春栅表,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背师枣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工怪瓶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人践美。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓洗贰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親陨倡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敛滋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,501評(píng)論 25 707
  • 本篇文章為Android源碼學(xué)習(xí)的第一章,主要講述Android平臺(tái)架構(gòu)的分層兴革,以及如何下載Android源碼绎晃。 ...
    codeteenager閱讀 360評(píng)論 0 0
  • 先上圖 Android 5.0 起的平臺(tái)架構(gòu)從原來(lái)的四層變成了五層蜜唾,新增了一個(gè)硬件抽象層,這五層分別是Linux ...
    指鹿為碼閱讀 470評(píng)論 0 0
  • 大小寫(xiě) JavaScript區(qū)分大小寫(xiě)庶艾。 HTML不區(qū)分大小寫(xiě)灵妨。 命名規(guī)則 標(biāo)識(shí)符必須以字母、_落竹、$開(kāi)頭。
    iDragonfly閱讀 94評(píng)論 0 0
  • 愛(ài) 讓ta牽動(dòng)情緒 關(guān)注都在ta 耐心都給ta 當(dāng)我索取不斷 對(duì)ta即是消耗 消耗著ta的精力和時(shí)間 攪亂了ta的...
    掉毛的老公閱讀 203評(píng)論 0 0