在深入Android開發(fā)之前,我們有必要去詳細(xì)了解下Android的系統(tǒng)架構(gòu)故黑,通過對Android架構(gòu)的剖析叔磷,能夠更清楚地理解Android編程的邏輯和方法,從而對Android開發(fā)有一個(gè)全局的掌控铐料。
這張圖是Google官方給出的架構(gòu)圖,想必大多數(shù)開發(fā)者都很熟悉吧。
從圖中可以看出钠惩,Android大致可以分為四層架構(gòu)柒凉、五塊區(qū)域。下面我們就從底層開始篓跛,逐層剖析膝捞。
1. Linux內(nèi)核層(LINUX KERNEL)
Android系統(tǒng)是基于Linux內(nèi)核, 借助Linux內(nèi)核服務(wù)實(shí)現(xiàn)硬件設(shè)備驅(qū)動(dòng)愧沟,進(jìn)程和內(nèi)存管理蔬咬,網(wǎng)絡(luò)協(xié)議棧,電源管理沐寺,無線通信等核心功能林艘。
- Android4.0版本之前基于Linux2.6系列內(nèi)核,4.0及之后的版本使用更新的Linux3.X內(nèi)核混坞,并且兩個(gè)開源項(xiàng)目開始有了互通狐援。
Linux3.4增添了電源管理等更多功能,以增加與Android的硬件兼容性究孕,使Android在更多設(shè)備上得到支持∩督矗現(xiàn)在android6.0仍然繼續(xù)延用著linux3.4.0,而linux最新的版本已經(jīng)到了4.3系列厨诸,那么為什么android沒有繼續(xù)去更新Linux kernel的版本也是一個(gè)值得以后慢慢探討的課題镶殷。
Linux內(nèi)核層同時(shí)也是硬件和軟件棧之間的抽象層,為Android設(shè)備的各種硬件提供了底層的驅(qū)動(dòng)微酬,如
- 顯示驅(qū)動(dòng)(Display Driver)批钠、照相機(jī)驅(qū)動(dòng)(Camera Driver)、藍(lán)牙驅(qū)動(dòng)(Bluetooth Driver)得封、閃存驅(qū)動(dòng)(Flash Memeory Driver)埋心、進(jìn)程間通信驅(qū)動(dòng)(IPC Driver)
- USB驅(qū)動(dòng)、鍵盤驅(qū)動(dòng)(Keypad Driver)忙上、WiFi驅(qū)動(dòng)拷呆、音頻驅(qū)動(dòng)(Audio Drivers)、電源管理(Power Management)
2. 系統(tǒng)運(yùn)行庫層(LIBRARIES)
在Google官方的系統(tǒng)架構(gòu)圖中疫粥,位于Linux內(nèi)核層之上的系統(tǒng)運(yùn)行庫層是應(yīng)用程序框架的支撐茬斧,為Android系統(tǒng)中的各個(gè)組件提供服務(wù)。系統(tǒng)運(yùn)行庫層由Android的系統(tǒng)類庫和運(yùn)行時(shí)庫構(gòu)成梗逮。
- 系統(tǒng)類庫
系統(tǒng)類庫大部分由C/C++編寫项秉,所提供的功能通過Android應(yīng)用程序框架為開發(fā)者所使用,主要的系統(tǒng)類庫及說明如下慷彤。
- Surface Manager:界面管理庫娄蔼,執(zhí)行多個(gè)應(yīng)用程序時(shí)怖喻,管理子系統(tǒng)的顯示,另外也對2D和3D圖形提供支持岁诉。
- Media Framework:多媒體框架庫锚沸,支持多種常用的音頻和視頻格式的播放、錄制和回放涕癣,所支持的編碼格式包括MPEG4哗蜈,MP3,H264坠韩,AAC距潘,ARM,還能處理靜態(tài)圖片文件只搁。
- SQLite:本地小型關(guān)系數(shù)據(jù)庫音比,Android提供了一些新的SQLite數(shù)據(jù)庫API,以替代傳統(tǒng)的耗費(fèi)資源的JDBC API须蜗。
- OpenGL|ES:基于OpenGL ES 1.0API標(biāo)準(zhǔn)實(shí)現(xiàn)的3D跨平臺(tái)圖形庫,提供了3D繪圖的支持目溉。
- FreeType:用于顯示位圖和矢量字體明肮。
- Webkit:Web瀏覽器的軟件引擎,提供了瀏覽器內(nèi)核的支持缭付。
- SGL:底層的2D圖形引擎柿估。
- SSL:安全套接層,是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議陷猫。
- libc:函數(shù)庫秫舌,繼承自BSD的C函數(shù)庫bionic libc,更適合基于嵌入式Linux的移動(dòng)設(shè)備绣檬。
除上述列舉的主要系統(tǒng)類庫之外足陨,Android NDK(Native Development Kit),即Android原生庫娇未,也十分重要墨缘。
NDK為開發(fā)者提供了直接使用Android系統(tǒng)資源,并采用C或C++語言編寫程序的接口零抬。因此镊讼,第三方應(yīng)用程序可以不依賴于Dalvik虛擬機(jī)進(jìn)行開發(fā)。實(shí)際上平夜,NDK提供了一系列從C或C++生成原生代碼所需要的工具蝶棋,為開發(fā)者快速開發(fā)C或C++的動(dòng)態(tài)庫提供方便,并能自動(dòng)將生成的動(dòng)態(tài)庫和Java應(yīng)用程序一起打包成應(yīng)用程序包文件忽妒,即.apk文件玩裙。
- 使用原生庫無法訪問應(yīng)用框架層API兼贸,兼容性可能無法保障。而且從安全性角度考慮献酗,Android原生庫用非類型安全的程序語言C,C++編寫寝受,更容易產(chǎn)生安全漏洞,原生庫的缺陷(bug)也可能更容易直接影響應(yīng)用程序的安全性罕偎。
- 系統(tǒng)運(yùn)行時(shí)庫
Android運(yùn)行時(shí)包含核心庫和Dalvik虛擬機(jī)兩部分很澄。
核心庫:允許開發(fā)者使用Java語言來編寫Android應(yīng)用,并提供Android的核心API颜及,如android.os甩苛,android.net,android.media等俏站。
Dalvik虛擬機(jī):基于apache的java虛擬機(jī)讯蒲,并被改進(jìn)以適應(yīng)低內(nèi)存,低處理器速度的移動(dòng)設(shè)備環(huán)境肄扎,是專門為移動(dòng)設(shè)備定制的墨林。Dalvik虛擬機(jī)依賴于Linux內(nèi)核,實(shí)現(xiàn)進(jìn)程隔離與線程調(diào)試管理犯祠,安全和異常管理旭等,垃圾回收等重要功能。
3. 應(yīng)用框架層(Application Framework)
這一層主要提供了構(gòu)建應(yīng)用程序時(shí)可能用到的各種API衡载,Android自帶的一些核心應(yīng)用就是使用這些API完成的搔耕,開發(fā)者可以通過使用這些API來快速構(gòu)建自己的應(yīng)用程序,同時(shí)也可以通過繼承實(shí)現(xiàn)個(gè)性化的擴(kuò)展痰娱。
- Activity Manager 活動(dòng)管理器接口
Window Manager 窗口管理器接口
Content Providers 內(nèi)容提供者接口
View System 視圖系統(tǒng)接口
Notification Manager 通知管理器接口
- Package Manager包管理器接口
Telephony Manager 電話管理器接口
Resource Manager 資源管理程序接口
Location Manager 位置管理器接口
XMPP Service 基于XMPP協(xié)議的即時(shí)通信接口
4. 應(yīng)用層(Applications)
所有安裝在手機(jī)上的應(yīng)用程序都屬于這一層弃榨,諸如SMS短信,電話撥號(hào)梨睁,圖片瀏覽器鲸睛,日歷,游戲坡贺,地圖腊凶,web瀏覽器等程序,以及開發(fā)人員自己開發(fā)的其他應(yīng)用程序拴念。
篇后語
終于將android的基本架構(gòu)進(jìn)行了一個(gè)系統(tǒng)的羅列和分析钧萍,從中我們不難發(fā)現(xiàn),平時(shí)開發(fā)中最常接觸是application層政鼠,一些application層應(yīng)用到的東西通過應(yīng)用框架層的引用一般都能在系統(tǒng)運(yùn)行庫層找到對應(yīng)的蹤跡风瘦,例如sqlite、webkit等公般,而如果想進(jìn)行Android底層開發(fā)万搔,那么Linux和C++知識(shí)則是必備的胡桨,至于想詳細(xì)了解底層到達(dá)application層的開發(fā)邏輯,則需要日后慢慢去做更深一層次的探究瞬雹。行文至此昧谊,Android的系統(tǒng)架構(gòu)應(yīng)該了然于心了吧。