android系統架構詳解
先放上一張android系統架構圖:
從上圖中可以看出,Android系統架構為四層結構,從上層到下層分別是:應用程式層、應用程式框架層、系統執行庫層以及Linux核心層,分別介紹如下:
1)應用程式層
Android平臺的應用層上包括各類與使用者直接互動的應用程式,或由java語言編寫的運行於後臺的服務程式。例如,智慧手機上實現的常見基本功能 程式,諸如SMS簡訊,電話撥號,圖片瀏覽器,日曆,遊戲,地圖,web瀏覽器等程式,以及開發人員開發的其他應用程式。
2)應用程式框架層
應用程式框架層是我們從事Android開發的基礎,很多核心應用程式也是通過這一層來實現其核心功能的,該層簡化了元件的重用,開發人員可以直接使用其提供的元件來進行快速的應用程式開發,也可以通過繼承而實現個性化的拓展。具體模組如下:
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服務
3)系統執行庫層
系統執行庫層是應用程式框架的支撐,是連線應用程式框架層與Linux核心層的重要紐帶,為Android系統中的各個元件提供服務。系統執行庫層由系統類庫和Android執行時構成。具體如下:
a)系統庫
主要分為如下幾個:
Surface Manager:執行多個應用程式時候,負責管理顯示與存取操作間的互動,另外也負責2D繪圖與3D繪圖進行顯示合成。
Media Framework:多媒體庫,基於PacketVideo OpenCore;
SQLite:小型的關係型資料庫引擎
OpenGL|ES:根據OpenGLES 1.0API標準實現的3D繪圖函式庫
FreeType:提供點陣字與向量字的描繪與顯示
WebKit:一套網頁瀏覽器的軟體引擎
SGL:底層的2D圖形渲染引擎
SSL:在Andorid上通訊過程中實現握手
Libc:從BSD繼承來的標準C系統函式庫,專門為基於embedded linux的裝置定製
b)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格 式的中間碼。(安卓在4.4中釋出了ART執行時)
4)Linux核心層
Android以Linux作業系統核心為基礎,藉助Linux核心服務實現硬體裝置驅動,程序和記憶體管理,網路協議棧,電源管理,無線通訊等核心功能。Android4.0版本之前基於Linux2.6系列核心,4.0及之後的版本使用更新的Linux3.X核心,並且兩個開源專案開始有了互通。Linux3.3核心中正式包括一些Android程式碼,可以直接引導進入Android。Linux3.4將會增添電源管理等更多功能,以增加與Android的硬體相容性,使Android在更多裝置上得到支援。
Android核心 對Linux核心進行了增強,增加了一些面向移動計算的特有功能。例如,低記憶體管理器LMK(Low Memory Keller),匿名共享記憶體(Ashmem),以及輕量級的程序間通訊Binder機制等。這些核心的增強使Android在繼承Linux核心安全機制的同時,進一步提升了記憶體管理,程序間通訊等方面的安全性。如下是Android核心的主要驅動模組:
Power Management:針對嵌入式裝置的,基於標準Linux電源管理系統的,輕量級的電源管理驅動
Low Memory Keller:可以根據需要殺死程序來釋放需要的記憶體。擴充套件了Linux的OOM機制,形成獨特的LMK機制
Ashmem:為程序之間提供共享記憶體資源,同時為核心提供回收和管理記憶體的機制
Android Logger:一個輕量級的日誌裝置
Anroid Alarm:提供了一個定時器用於把裝置從睡眠狀態喚醒
Android PMEM:DSP及其他裝置只能工作在連續的實體記憶體上,PMEM用於向用戶空間提供 連續的實體記憶體區域對映
Android Timed device:可以執行對裝置的定時控制功能
Yaffs2檔案系統:Android採用大容量的NAND快閃記憶體作為儲存裝置,使用Yaffs2作為檔案系統管理大容量MTD NAND Flash;Yaffs2佔用記憶體小,垃圾回收簡潔迅速。
Android Paranoid網路 :對Linux核心的網路程式碼進行了改動,增加了網路認證機制。可在IPV4,IPV6和藍芽中設定,由ANDROID_PARANOID_NETWORK巨集來啟用此特性。