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 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系統中的位置:

鑒於許多硬件設備廠商不希望公開其設備驅動的源代碼,如果能將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系統架構


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM