Android系統(tǒng)架構(gòu)簡介

Android采用分層的架構(gòu),分為四層,從高層到底層分為應(yīng)用程序?qū)樱╝pp+System apps),應(yīng)用程序框架層(Java API Framework),系統(tǒng)運(yùn)行庫和運(yùn)行環(huán)境層(Libraries + android Runtime)和Linux核心層(HAL+ Linux Kernel),如下圖所示:


Android平臺示意圖

還有一張中文簡化版的分層圖如下:


Android分層圖

1. Linux核心層

linux內(nèi)核(Linux Kernel)

Android平臺的基礎(chǔ),直接和硬件打交道。硬件驅(qū)動、進(jìn)程管理、內(nèi)存管理、網(wǎng)絡(luò)管理的功能在這里實(shí)現(xiàn)。

硬件抽象層(Hardware Abstraction Layer)

為上層的Java API Framework提供相關(guān)硬件的界面顯示,Audio,Bluetooth等是組成硬件抽象層的庫模塊,實(shí)現(xiàn)每個(gè)硬件的界面顯示功能。

2. 系統(tǒng)運(yùn)行庫和運(yùn)行環(huán)境層

Android 運(yùn)行環(huán)境(Android Runtime)

Android 5.0(API 21)之前使用的是Dalvik虛擬機(jī),之后被ART所取代。
ART是Android操作系統(tǒng)的運(yùn)行環(huán)境,通過運(yùn)行虛擬機(jī)來執(zhí)行dex文件。其中,dex文件是專為安卓設(shè)計(jì)的的字節(jié)碼格式,好處多多,不再贅述。Android toolchain(一種編譯工具)可以將Java代碼編譯為dex字節(jié)碼格式,過程如下圖,jack是一種編譯工具鏈(tool chain)


Java代碼編譯為dex代碼

為了便于理解,做個(gè)類比,我們都知道,java程序的運(yùn)行需要java的核心包的支持,然后通過JVM虛擬機(jī)來運(yùn)行我們的應(yīng)用程序。在Android中,Android程序的運(yùn)行需要core Libararies的支持,然后通過ART或者Dalvik來運(yùn)行該程序。

原生C/C++ 庫(Native c/c++ Libraries)

上面提到的ART就依賴于C/C++庫。開發(fā)者可以通過調(diào)用Java API Framework來使用原生庫的功能,也可以用Android NDK直接調(diào)用原生庫。

3. 應(yīng)用程序框架層

java API Framework

我們最常用的組件和服務(wù)都在這一層,也是每一個(gè)安卓開發(fā)者必須要熟悉的一層,

4. Application層

系統(tǒng)應(yīng)用(system apps)

可以理解為內(nèi)置在Android系統(tǒng)的app,我們可以像調(diào)用Java API Framework層一樣直接調(diào)用系統(tǒng)app。

我們也可以自己編寫System app,但是要注意系統(tǒng)應(yīng)用的權(quán)限比較特殊,直接寫在manifest里面是不行的。需要做特別的處理,參考http://www.programgo.com/article/76213742299/

因此,app開發(fā)主要研究Java API Framework層和應(yīng)用程序?qū)蛹纯?,如果有用到JNI,還需要研究一下Native c/c++ Libraries。但是Android運(yùn)行庫和Android運(yùn)行時(shí)主要是從事系統(tǒng)開發(fā)的人員需要研究的。把握全局的同時(shí),也要搞清楚重點(diǎn),畢竟,術(shù)業(yè)有專攻?!?/p>

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

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

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