標籤:
Android系統架構
Android採用層次化系統架構,官方公布的標準架構如所示。Android由底層往上分為4個主要功能層,分別是linux核心層(Linux Kernel),系統執行階段程式庫層(Libraries和Android Runtime),應用程式架構層(Application Framework)和應用程式層(Applications)。
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核心的主要驅動模組:
| 驅動名稱 |
說明 |
| Android電源管理(Power Management) |
針對嵌入式裝置的,基於標準Linux電源管理系統的,輕量級的電源管理驅動 |
| 低記憶體管理器(Low Memory Keller) |
可以根據需要殺死進程來釋放需要的記憶體。擴充了Linux的OOM機制,形成獨特的LMK機制 |
| 匿名共用記憶體(Ashmem) |
為進程之間提供共用記憶體資源,同時為核心提供回收和管理記憶體的機制 |
| 日誌(Android Logger) |
一個輕量級的日誌裝置 |
| 定時器(Anroid Alarm) |
提供了一個定時器用於把裝置從睡眠狀態喚醒 |
| 實體記憶體映射管理(Android PMEM) |
DSP及其他裝置只能工作在連續的實體記憶體上,PMEM用於向使用者空間提供 連續的實體記憶體區域對應 |
| Android定時裝置(Android Timed device) |
可以執行對裝置的定時控制功能 |
| Yaffs2檔案系統 |
Android採用大容量的NAND快閃記憶體作為存放裝置,使用Yaffs2作為檔案系統管理大容量MTD NAND Flash;Yaffs2佔用記憶體小,記憶體回收簡潔迅速。 |
| Android Paranoid網路 |
對Linux核心的網路代碼進行了改動,增加了網路認證機制。可在IPV4,IPV6和藍芽中設定,由ANDROID_PARANOID_NETWORK宏來啟用此特性。 |
硬體抽象層
核心驅動和使用者軟體之間還存在所謂的硬體抽象層(Hardware Abstract Layer,HAL),它是對硬體裝置的具體實現加以抽象。HAL沒有在Android官方系統架構圖中標明,標出了硬體抽象層在android系統中的位置:
鑒於許多硬體裝置廠商不希望公開其裝置驅動的原始碼,如果能將android的應用程式框架層與linux系統核心的裝置驅動隔離,使應用程式架構的開發盡量獨立於具體的驅動程式,則android將減少對Linux核心的依賴。HAL由此而生,它是對Linux核心驅動程式進行的封裝,將硬體抽象化,屏蔽掉了底層的實現細節。HAL規定了一套應用程式層對硬體層讀寫和配置的統一介面,本質上就是將硬體的驅動分為使用者空間和核心空間兩個層面;Linux核心驅動程式運行於核心空間,硬體抽象層運行於使用者空間。
系統運行庫層
官方的系統架構圖中,位於Linux核心層之上的系統運行庫層是應用程式架構的支撐,為Android系統中的各個組件提供服務。系統運行庫層由系統類別庫和Android運行時構成。
1. 系統類別庫
系統類別庫大部分由C/C++編寫,所提供的功能通過Android應用程式架構為開發人員所使用。主要的系統類別庫及說明如下表:
| 系統類別庫名稱 |
說明 |
| Surface Manager |
執行多個應用程式時,管理子系統的顯示,另外也對2D和3D圖形提供支援 |
| Media Framework |
基於PacketVideoOpenCore的多媒體庫,支援多種常用的音頻和視頻格式的錄製和回放,所支援的編碼格式包括MPEG4,MP3,H264,AAC,ARM |
| SQLite |
本地小型關聯式資料庫,Android提供了一些新的SQLite資料庫API,以替代傳統的耗費資源的JDBC API |
| OpenGL|ES |
基於OpenGL ES 1.0API標準實現的3D跨平台圖形庫 |
| FreeType |
用於顯示位元影像和向量字型 |
| WebKit |
Web瀏覽器的軟體引擎 |
| SGL |
底層的2D圖形引擎 |
| Libc(bionic l ibc) |
繼承自BSD的C函數庫bionic libc,更適合基於嵌入式Linux的行動裝置 |
| SSL |
安全套接層,是為網路通訊提供安全及資料完整性的一種安全性通訊協定 |
除上表列舉的主要系統類別庫之外,Android NDK(Native Development Kit),即Android原生庫,也十分重要。NDK為開發人員提供了直接使用Android系統資源,並採用C或C++語言編寫程式的介面。因此,第三方應用程式可以不依賴於Dalvik虛擬機器進行開發。實際上,NDK提供了一系列從C或C++產生原生代碼所需要的工具,為開發人員快速開發C或C++的動態庫提供方便,並能自動將產生的動態庫和java應用程式一起打包成應用程式套件組合檔案,即.apk檔案。
注意,使用原生庫無法訪問應用程式框架層API,相容性可能無法保障。而且從安全性角度考慮,Android原生庫用非型別安全的程式語言C,C++編寫,更容易產生安全性漏洞,原生庫的缺陷(bug)也可能更容易直接影響應用程式的安全性。
2. 運行時
Android運行時包含核心庫和Dalvik虛擬機器兩部分。
核心庫:核心庫提供了Java5 se API的多數功能,並提供Android的核心API,如android.os,android.net,android.media等。
Dalvik虛擬機器:Dalvik虛擬機器是基於apache的java虛擬機器,並被改進以適應低記憶體,低處理器速度的行動裝置環境。Dalvik虛擬機器依賴於Linux核心,實現進程隔離與線程調試管理,安全和異常管理,記憶體回收等重要功能。
本質而言,Dalvik虛擬機器並非傳統意義上的java虛擬機器(JVM)。Dalvik虛擬機器不僅不按照Java虛擬機器的規範來實現,而且兩者不相容。
Dalvik和標準Java虛擬機器有以下主要區別:
Dalvik基於寄存器,而JVM基於棧。一般認為,基於寄存器的實現雖然更多依賴於具體的CPU結構,硬體通用性稍差,但其使用等長指令,在效率速度上較傳統JVM更有優勢。
Dalvik經過最佳化,允許在有限的記憶體中同時高效地運行多個虛擬機器的執行個體,並且每一個Dalvik應用作為一個獨立的Linux進程執行,都擁有一個獨立的Dalvik虛擬機器執行個體。Android這種基於Linux的進程“沙箱”機制,是整個安全設計的基礎之一。
Dalvik虛擬機器從DEX(Dalvik Executable)格式的檔案中讀取指令與資料,進行解釋運行。DEX檔案由傳統的,編譯產生的CLASS檔案,經dx工具軟體處理後產生。
Dalvik的DEX檔案還可以進一步最佳化,提高運行效能。通常,OEM的應用程式可以在系統編譯後,直接產生最佳化檔案(.ODEX); 第三方的應用程式則可在運行時在緩衝中最佳化與儲存,最佳化後的格式為DEY(.dey檔案)。
應用程式架構層
應用程式架構層提供開發Android應用程式所需的一系列類庫,使開發人員可以進行快速的應用程式開發,方便重用組件,也可以通過繼承實現個人化的擴充。具體包括的模組如表:
| 應用程式架構層類庫名稱 |
功能 |
| Active Manager(Activity Mananger) |
管理各個應用程式生命週期並提供常用的導航回退功能,為所有程式的視窗提供互動的介面 |
| 視窗管理器(Window Manager) |
對所有開啟的視窗程序進行管理 |
| 內容提供器(Content Provider) |
提供一個應用程式訪問另一個應用程式資料的功能,或者實現應用程式之間的資料共用 |
| 視圖系統(View System) |
建立應用程式的基本組件,包括列表(lists),網格(grids),文字框(text boxes),按鈕(buttons),還有可嵌入的web瀏覽器。 |
| 通知管理器(Notification Manager) |
使應用程式可以在狀態列中顯示自訂的客戶提示資訊 |
| 包管理器(Package Manager) |
對應用程式進行管理,提供的功能諸如安裝應用程式,卸載應用程式,查詢相關許可權資訊等。 |
| 資源管理員(Resource Manager) |
提供各種非代碼資源供應用程式使用,如本地化字串,圖片,音頻等 |
| 位置管理器(Location Manager) |
提供位置服務 |
| 電話管理器(Telephony Manager) |
管理所有的行動裝置功能 |
| XMPP服務 |
是Google線上即時交流軟體中一個通用的進程,提供後台推送服務 |
應用程式層
Android平台的應用程式層上包括各類與使用者直接互動的應用程式,或由java語言編寫的運行於背景服務程式。例如,智能手機上實現的常見準系統 程式,諸如SMS簡訊,電話撥號,圖片瀏覽器,日曆,遊戲,地圖,web瀏覽器等程式,以及開發人員開發的其他應用程式。
稿源:勤快學QKXue.NET
擴充閱讀:
http://qkxue.net/info/30724/android
http://qkxue.net/info/29803/Crashlytics-Android
http://qkxue.net/info/29670/Android-LED-APP
http://qkxue.net/info/29483/Android-FPS
http://qkxue.net/info/29461/Android-Message-Digest
http://qkxue.net/tag/android
Android系統架構