Android系統架構大致可分爲四層,分層的好處就是使用下層提供的服務而爲上層提供統一的服務,屏蔽本層及以下層的差異,當本層及以下層發生了變化不會影響到上層。也就是說各層各司其職,各層提供固定的SAP(Service Access Point),專業點可以說是高內聚、低耦合。
由圖可以知道,這四層分別是:
Linux Kernel (Linux內核層)
Android是基於Linux2.6內核,其核心繫統服務如安全性、內存管理、進程管理、網路協議以及驅動模型都依賴於Linux內核。Linux Kernel也作爲硬件和軟件之間的抽象層,它隱藏具體硬件細節而爲上層提供統一的服務。
Libraries和Android Runtime(系統運行庫層)
從圖中可以看出,系統運行庫層可以分成兩部分,分別是系統庫和Android運行時,分別介紹如下:
系統庫
系統庫是應用程序框架的支撐,是連接應用程序框架層與Linux內核層的重要紐帶。其主要分爲如下幾個:
Surface Manager:
執行多個應用程序時候,負責管理顯示與存取操作間的互動,另外也負責2D繪圖與3D繪圖進行顯示合成。
Media Framework:
多媒體庫,基於PacketVideo OpenCore;支持多種常用的音頻、視頻格式錄製和回放,編碼格式包括MPEG4、MP3、H.264、AAC、ARM。
SQLite:
小型的關係型數據庫引擎
OpenGL|ES:
根據OpenGLES 1.0API標準實現的3D繪圖函數庫
FreeType:
提供點陣字與向量字的描繪與顯示
WebKit:
一套網頁瀏覽器的軟件引擎
SGL:
底層的2D圖形渲染引擎
SSL:
在Andorid上通信過程中實現握手
Libc:
從BSD繼承來的標準C系統函數庫,專門爲基於embedded linux的設備定製
Android運行時
Android應用程序時採用Java語言編寫,程序在Android運行時中執行,其運行時分爲核心庫和Dalvik虛擬機兩部分。
核心庫
核心庫提供了Java語言API中的大多數功能,同時也包含了Android的一些核心API,如android.os、android.net、android.media等等。
Dalvik虛擬機
Android程序不同於J2me程序,每個Android應用程序都有一個專有的進程,並且不是多個程序運行在一個虛擬機中,而是每個Android程序都有一個Dalivik虛擬機的實例,並在該實例中執行。Dalvik虛擬機是一種基於寄存器的Java虛擬機,而不是傳統的基於棧的虛擬機,並進行了內存資源使用的優化 以及支持多個虛擬機的特點。需要注意的是,不同於J2me,Android程序在虛擬機中執行的並非編譯後的字節碼,而是通過轉換工具dx將Java字節碼轉成dex格 式的中間碼。
Application Framework(應用程序框架層)
通過提供開放的開發平臺,Android使開發者能夠編制極其豐富和新穎的應用程序。開發者可以自由地利用設備硬件優勢、訪問位置信息、運行後臺服務、設置鬧鐘、向狀態欄添加通知等等,很多很多。
開發者可以完全使用核心應用程序所使用的框架APIs。應用程序的體系結構旨在簡化組件的重用,任何應用程序都能發佈他的功能且任何其他應用程序可以使用這些功能(需要服從框架執行的安全限制)。這一機制允許用戶替換組件。
所有的應用程序其實是一組服務和系統,包括:
a)Activity Manager(活動管理器)
管理各個應用程序生命週期以及通常的導航回退功能
b)Window Manager(窗口管理器)
管理所有的窗口程序
c)Content Provider(內容提供器)
使得不同應用程序之間存取或者分享數據
d)View System(視圖系統)
構建應用程序的基本組件
e)NotificationManager(通告管理器)
使得應用程序可以在狀態欄中顯示自定義的提示信息
f)Package Manager(包管理器)
Android系統內的程序管理
g)TelephonyManager(電話管理器)
管理所有的移動設備功能
h)Resource Manager(資源管理器)
提供應用程序使用的各種非代碼資源,如本地化字符串、圖片、佈局文件、顏色文件等
i)LocationManager(位置管理器)
提供位置服務
j)XMPP Service(XMPP服務)
提供GoogleTalk服務
Application(應用程序層)
Android平臺不僅僅是操作系統,也包含了許多應用程序,諸如SMS短信客戶端程序、電話撥號程序、圖片瀏覽器、Web瀏覽器等應用程序。這些應用程序都是 用Java語言編寫的,並且這些應用程序都是可以被開發人員開發的其他應用程序所替換,這點不同於其他手機操作系統固化在系統內部的系統軟件,更加靈活和個 性化。