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)坦弟,如下圖所示:
還有一張中文簡化版的分層圖如下:
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)每個硬件的界面顯示功能。
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è)計的的字節(jié)碼格式,好處多多宴凉,不再贅述誊锭。Android toolchain(一種編譯工具)可以將Java代碼編譯為dex字節(jié)碼格式,過程如下圖弥锄,jack是一種編譯工具鏈(tool chain)
為了便于理解丧靡,做個類比蟆沫,我們都知道,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ù)都在這一層纬黎,也是每一個安卓開發(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ū)蛹纯缮⒉溃绻杏玫絁NI菇绵,還需要研究一下Native c/c++ Libraries镇眷。但是Android運(yùn)行庫和Android運(yùn)行時主要是從事系統(tǒng)開發(fā)的人員需要研究的咬最。把握全局的同時欠动,也要搞清楚重點(diǎn),畢竟具伍,術(shù)業(yè)有專攻⊙夭拢·