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瀏覽器等程序,以及開發人員開發的其餘應用程序。