來源:Android開發之Android體系架構介紹
在Android中,整個架構由應用、應用程式框架、原生庫、Android即時庫、硬體抽象層、Linux核心等若干部分組成。
其中最核心的Android虛擬機器部分也已經開放源碼。對開發人員而言,如果期望在深度定製的基礎上開發出差異化、高度競爭力的產品,需要在應用程式框架、原生庫、硬體抽象層、Linux核心等方面有較深入的理解。圖1顯示了Android的體系架構。
圖1 Android體系架構
1、核心服務
所謂Android的核心服務主要包括熵服務(Entropy Service)、電源管理器(Power Manager)、Activity管理器(Activity Manager)、通話寄存器(Telephony Registry)、包管理器(Package Manager)、賬戶管理器(Account Manager)、內容組合管理(Content Manager)、內容提供器(System Content Providers)、電池服務(Battery Service)、光線服務(Lights Service)、震動服務(Vibrator
Service)、鬧鐘管理器(Alarm Manager)、看門狗(Init Watchdog)、視窗管理器(Window Manager)、藍芽服務(Bluetooth Service)等。這些服務和應用程式密切相關,但通常應用程式不能直接接入核心服務。早期版本中的硬體服務(Hardware Service)和感應器服務(Sensor Service)已經被移除,光線服務和震動服務在核心服務通過系統伺服器來啟動。系統伺服器的實現位於SystemServer.java中。
2、原生服務
在Android中,上層的應用是基於Java開發的,但是架構層的服務很多是基於C/C++的,為了說明的方便,在本書中,將基於C/C++的服務稱為原生服務。目前,Android提供的和多媒體相關的原生服務主要有渲染管理器(Surface Flinger)、音頻管理器(Audio Flinger)、Camera服務(Camera Service)、媒體播放服務(MediaPlayer Service)、音頻策略服務(Audio Policy Service)等。
3、原生庫
Android的原生庫主要是基於C\C++實現的一些原生組件,包括C庫Bionic、瀏覽器引擎Webkit、多媒體引擎OpenCORE、SQL資料庫SQLite、3D渲染引擎OpenGL ES、位元影像和字型向量渲染引擎FreeType、2D映像渲染引擎SGL(Skia Graphics Library)、互連網安全性通訊協定SSL和TSL等。
4、運行時組件
在Android中,比較重要的Java組件包括Java核心庫、Dalvik虛擬機器等,兩者一起構成了Android的應用環境基礎。
5、硬體抽象層
在Android中,考慮到並非所有組件都具有標準的Linux核心驅動介面,而且基於GPL V20許可的Linux驅動核心會暴露出專用IP核的細節,另外Android對硬體驅動也有些特殊的需求。為了屏蔽底層實現的細節,實現硬體邏輯和硬體介面的分離,Google定義了一個硬體抽象層的介面HAL(Hardware Abstraction Layer)。
HAL在為商業開發帶來便利的同時,對系統的效能略有阻礙,更多的層次會導致系統變慢,在案頭Ubunut Linux中,為了加快系統的啟動速度,就徹底拋棄了HAL的理念。
6、Linux核心
Android平台是基於Linxu核心搭建的,Linux核心的優勢在於大記憶體管理、進程管理、基於許可權的安全模型、統一的驅動模型、共用庫支援、代碼開源等。
Android平台在設計過程中,針對移動終端資源有限的特點,對Linux進行了一定程度的裁剪:砍掉了原生的視窗系統、去除了對GNU Libc的支援(引入了更高效、針對嵌入式最佳化過的Bionic)、裁剪掉了一些標準Linux工具的部分特性等。
另外Android針對移動終端的特點還對Linux核心在鬧鐘(Alarm)、Low Memory Killer、Ashmem、核心調試(Kernel Debugger)、處理序間通訊(Binder)、日誌(Logger)、電源管理(Power Management)等方面做了大量的最佳化。
其中Low Memory Killer相對於Linux標準OOM(Out Of Memory)機制更加靈活,它可以根據需要殺死進程來釋放需要的記憶體。Low Memory Killer的實現主要位於aurora\msm\msm drivers/staging/android/lowmemorykiller.c檔案中。
Ashmem為進程間提供大塊共用記憶體,同時為核心提供回收和管理這個記憶體的機制。 Ashmem的實現位於system\core\libcutils\ashmem-dev.c檔案中。(摘自華清遠見系列圖書《Android多媒體編程從初學到精通》)
更多華清遠見原創教材展:http://www.farsight.com.cn/FarsightBooks/home.html
嵌入式及3G相關資源及學習請點擊:嵌入式開發視頻 android開發視頻 android培訓 3G培訓 QT培訓 QT開發視頻 物聯網培訓 物聯網技術視頻 嵌入式學習