官术网_书友最值得收藏!

1.2 Android系統(tǒng)架構(gòu)解析

本節(jié)將討論Android的系統(tǒng)架構(gòu)。Android系統(tǒng)架構(gòu)和其他操作系統(tǒng)一樣,采用了分層的架構(gòu)。共分為4個(gè)層,從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和Linux核心層,Android的體系結(jié)構(gòu),如圖1-6所示。

圖1-6 Android體系結(jié)構(gòu)

下面將對(duì)這4層進(jìn)行詳細(xì)的分析和介紹。

1.應(yīng)用層

應(yīng)用是用Java語言編寫的運(yùn)行在虛擬機(jī)上的程序,即圖中最上層的藍(lán)色部分,如圖1-7所示。其實(shí),Google最開始時(shí)就在Android系統(tǒng)中捆綁了一些核心應(yīng)用,比如E-mail客戶端、SMS短消息程序、日歷、地圖、瀏覽器、聯(lián)系人管理程序等,如圖1-7所示。

圖1-7 應(yīng)用層

2.應(yīng)用框架層

這一層是編寫Google發(fā)布的核心應(yīng)用時(shí)所使用的API框架,開發(fā)人員同樣可以使用這些框架來開發(fā)自己的應(yīng)用,這樣便簡(jiǎn)化了程序開發(fā)的架構(gòu)設(shè)計(jì),但是必須遵守其框架的開發(fā)原則,如圖1-8所示。

圖1-8 應(yīng)用框架層

從圖1-8可以看出,Android提供了如下一些組件。

(1)豐富而又可擴(kuò)展的視圖(Views):可以用來構(gòu)建應(yīng)用程序,它包括列表(lists)、網(wǎng)格(grids)、文本框(text boxes)、按鈕(buttons),甚至可嵌入的Web瀏覽器。

(2)內(nèi)容提供器(Content Providers):它可以讓一個(gè)應(yīng)用訪問另一個(gè)應(yīng)用的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或共享它們自己的數(shù)據(jù)。

(3)資源管理器(Resource Manager):提供非代碼資源的訪問,如本地字符串、圖形、布局文件(layout files)。

(4)通知管理器(Notification Manager):應(yīng)用可以在狀態(tài)欄中顯示自定義的提示信息。

(5)活動(dòng)管理器(Activity Manager):用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航退回功能。

(6)窗口管理器(Window Manager):管理所有的窗口程序。

(7)包管理器(Package Manager):Android系統(tǒng)內(nèi)的程序管理。

3.系統(tǒng)運(yùn)行庫(C/C++庫以及Android運(yùn)行庫)層

當(dāng)我們使用Android應(yīng)用框架時(shí),Android系統(tǒng)會(huì)通過一些C/C++庫來支持對(duì)我們使用的各個(gè)組件,使其能更好地為開發(fā)者服務(wù)。下面是一些核心的庫及其功能,如圖1-9所示。

圖1-9 系統(tǒng)運(yùn)行庫層

從圖中可以看出,系統(tǒng)運(yùn)行庫層可以分成兩部分,分別是系統(tǒng)核心庫和Android運(yùn)行時(shí),具體介紹如下。

系統(tǒng)核心庫:系統(tǒng)核心庫是應(yīng)用程序框架的支撐,是連接應(yīng)用程序框架層與Linux內(nèi)核層的重要紐帶。其主要分為如下幾個(gè)。

● Surface Manager:執(zhí)行多個(gè)應(yīng)用程序時(shí)候,負(fù)責(zé)管理顯示與存取操作間的互動(dòng),另外也負(fù)責(zé)2D繪圖與3D繪圖進(jìn)行顯示合成。

● Media Framework:多媒體庫,基于PacketVideo OpenCore;支持多種常用的音頻、視頻格式錄制和回放,編碼格式包括MPEG4.MP3.H.264.AAC、ARM。

●SQLite:型的關(guān)系型數(shù)據(jù)庫引擎。

●OpenGL|ES:根據(jù)OpenGL ES 1.0API標(biāo)準(zhǔn)實(shí)現(xiàn)的3D繪圖函數(shù)庫。

●FreeType:提供點(diǎn)陣字與向量字的描繪與顯示。

●WebKit:一套網(wǎng)頁瀏覽器的軟件引擎。

●7SGL:底層的2D圖形渲染引擎。

●SSL:在Andorid上通信過程中實(shí)現(xiàn)握手。

●Libc:從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫,專門為基于embedded linux的設(shè)備定制。

Android運(yùn)行時(shí):Android應(yīng)用程序時(shí)采用Java語言編寫,程序在Android運(yùn)行時(shí)中執(zhí)行,其運(yùn)行時(shí)分為核心庫和Dalvik虛擬機(jī)兩部分。

● 核心庫:核心庫提供了Java語言API中的大多數(shù)功能,同時(shí)也包含了Android的一些核心API,如android.os、android.net、android.media等。

● Dalvik虛擬機(jī):Android程序不同于J2me程序,每個(gè)Android應(yīng)用程序都有一個(gè)專有的進(jìn)程,并且不是多個(gè)程序運(yùn)行在一個(gè)虛擬機(jī)中,而是每個(gè)Android程序都有一個(gè)Dalivik虛擬機(jī)的實(shí)例,并在該實(shí)例中執(zhí)行。Dalvik虛擬機(jī)是一種基于寄存器的Java虛擬機(jī),而不是傳統(tǒng)的基于棧的虛擬機(jī),并進(jìn)行了內(nèi)存資源使用的優(yōu)化以及支持多個(gè)虛擬機(jī)的特點(diǎn)。需要注意的是,不同于J2me,Android程序在虛擬機(jī)中執(zhí)行的并非編譯后的字節(jié)碼,而是通過轉(zhuǎn)換工具dx將Java字節(jié)碼轉(zhuǎn)成dex格式的中間碼。

4.Linux內(nèi)核(Linux Kernel)層

Android運(yùn)行在Linux kernel 2.6之上,但是把Linux內(nèi)受GNU協(xié)議約束的部分做了取代,這樣在Android的程序可以用于商業(yè)目的。

Linux內(nèi)核是硬件和軟件層之間的抽象層,如圖1-10所示。

圖1-10 Linux內(nèi)核層

Android的核心系統(tǒng)服務(wù)基于Linux 2.6內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型等都依賴于該內(nèi)核。Linux內(nèi)核同時(shí)也作為硬件和軟件棧之間的抽象層。Android更多的是需要一些與移動(dòng)設(shè)備相關(guān)的驅(qū)動(dòng)程序,主要的驅(qū)動(dòng)如下所示。

● 顯示驅(qū)動(dòng)(Display Driver):基于Linux的幀緩沖(Frame Buffer)驅(qū)動(dòng)。

● 盤驅(qū)動(dòng)(KeyBoard Driver):作為輸入設(shè)備的鍵盤驅(qū)動(dòng)。

● Flash內(nèi)存驅(qū)動(dòng)(Flash Memory Driver):基于MTD的Flash驅(qū)動(dòng)程序。

● 照相機(jī)驅(qū)動(dòng)(Camera Driver):常用的基于Linux的v4l2(Video for Linux)驅(qū)動(dòng)。

● 音頻驅(qū)動(dòng)(Audio Driver):常用的基于ALSA(Advanced Linux Sound Architecture)的高級(jí)Linux聲音體系驅(qū)動(dòng)。

● 藍(lán)牙驅(qū)動(dòng)(Bluetooth Driver):基于IEEE 802.15.1標(biāo)準(zhǔn)的無線傳輸技術(shù)。WiFi驅(qū)動(dòng):基于IEEE 802.11標(biāo)準(zhǔn)的驅(qū)動(dòng)程序。

● Binder IPC驅(qū)動(dòng):Android的一個(gè)特殊的驅(qū)動(dòng)程序,具有單獨(dú)的設(shè)備節(jié)點(diǎn),提供進(jìn)程間通信的功能。

● Power Management(電源管理):比如電池電量等。

主站蜘蛛池模板: 奉贤区| 镇平县| 抚顺市| 霸州市| 五台县| 牙克石市| 溧阳市| 东平县| 无为县| 邳州市| 黄大仙区| 永善县| 神农架林区| 莱芜市| 陆良县| 漳州市| 永仁县| 房产| 韶山市| 宣化县| 宝兴县| 宁安市| 苍溪县| 岢岚县| 双辽市| 镇平县| 濮阳县| 裕民县| 吉隆县| 丰镇市| 罗源县| 桂阳县| 运城市| 南京市| 鄢陵县| 娄底市| 崇州市| 泸定县| 纳雍县| 余庆县| 清镇市|