Android開發之Android體系架構介紹 – 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多媒體編程從初學到精通》)

發佈留言