Android的系統框架的深刻認識

Android採用層次化系統架構,官方公佈的標準架構以下圖所示。Android由底層往上分爲4個主要功能層,分別是linux內核層(Linux Kernel)系統運行時庫層(Libraries和Android Runtime)應用程序架構層(Application Framework)應用程序層(Applications)java

Linux內核層linux

Android以Linux操做系統內核爲基礎,藉助Linux內核服務實現硬件設備驅動,進程和內存管理,網絡協議棧,電源管理,無線通訊等核心功能。Android4.0版本以前基於Linux2.6系列內核,4.0及以後的版本使用更新的Linux3.X內核,而且兩個開源項目開始有了互通。Linux3.3內核中正式包括一些Android代碼,能夠直接引導進入Android。Linux3.4將會增添電源管理等更多功能,以增長與Android的硬件兼容性,使Android在更多設備上獲得支持。android

Android內核 對Linux內核進行了加強,增長了一些面向移動計算的特有功能。例如,低內存管理器LMK(Low Memory Keller),匿名共享內存(Ashmem),以及輕量級的進程間通訊Binder機制等。這些內核的加強使Android在繼承Linux內核安全機制的同時,進一步提高了內存管理,進程間通訊等方面的安全性。下表列舉了Android內核的主要驅動模塊:web

驅動名稱                                                                    說明
Android電源管理(Power Ma nagement) 針對嵌入式設備的,基於標準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系統中的位置:apache

鑑於許多硬件設備廠商不但願公開其設備驅動的源代碼,若是能將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應用程序所需的一系列類庫,使開發人員能夠進行快速的應用程序開發,方便重用組件,也能夠經過繼承實現個性化的擴展。具體包括的模塊如表:

應用程序框架層類庫名稱                                                       功能
活動管理器(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瀏覽器等程序,以及開發人員開發的其餘應用程序。

轉載自:Android基礎之Android系統架構

相關文章
相關標籤/搜索