【Android 平臺(tái)架構(gòu)】
Android 是一種基于 Linux 的開(kāi)放源代碼軟件棧,為廣泛的設(shè)備和機(jī)型而創(chuàng)建。下圖所示為 Android 平臺(tái)的主要組件。
圖 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)