Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android體系架構詳解

Android體系架構詳解

編輯:關於Android編程

本文講述的Android系統體系架構,是指應用層之下的整個系統內部的架構層級關系。而並非常說的4層架構:應用層,framework,運行庫與環境,Linux內核,而是把系統內部的流程調用劃分更加詳細。

一、架構

Android系統體系架構圖:

android architecture

Android系統體系架構分為5層,自頂而下分別是:

  • 應用程序框架(Application Framework)
  • 進程通信層(Binder IPC)
  • 系統服務層(Android System Services)
  • 硬件抽象層(HAL)
  • Linux內核(Linux Kernel)

1.1 應用程序框架(Application Framework)

應用框架,對於App開發者使用最為頻繁。而硬件開發者,只需要認識到這些APIs是HAL層接口的映射就可以了。

1.2 進程通信層(Binder IPC)

Binder Inter-Process Communication(IPC),進程間通信機制允許framework來跨進程邊界,來調用Android的系統服務的代碼,這使得框架API與Android系統服務能夠進行交互。對於開發者來說,這種通信機制是隱藏的。

1.3 系統服務層(Android System Services)

功能是通過framework APIs與系統服務通信,以實現底層硬件的訪問。服務是模塊化的,主要部件如Window Manager, Search Service,或者Notification Manager.Android包括兩類服務:系統服務(如Window Manager,Notification Manager)和媒體服務(包括播放和錄制的媒體服務)。

1.4 硬件抽象層(HAL)

硬件抽象層(HAL)定義了一個標准接口用於硬件廠商的實現. HAL允許功能實現,而不會影響或修改上層的系統。HAL的實現被打包成模塊(.so)文件,並在適當的時候被加載進Android系統。

HAL components 硬件抽象層組件

  • 標准HAL結構 每個特定的硬件HAL接口特性被定義在hardware/libhardware/include/hardware/hardware.h,這保證HAL具有可預測的結構。該接口允許Android系統來加載相應HAL模塊的正確版本。HAL接口有兩個通用組件:模塊與設備。

  • HAL模塊 HAL的實現被用於構建成模塊(.so)文件,並在適當的時機通過Android動態鏈接到系統。你可以通過為每一個HAL的實現創建Android.mk文件並指向源碼文件,來實現將其構建到系統中。一般來說,你的共享庫必須被命名為符合規定的格式,以保證他們能被找到被正確加載。命名模式為為 <module_type>:<device_name>.

1.5 Linux內核(Linux Kernel)

開發設備驅動程序類似於開發一個典型的Linux設備驅動程序。Android使用Linux內核,再加上一些特殊的特性,如wake locks, Binder IPC驅動,以及用於移動嵌入式平台重要的其他功能。這些增加主要用於系統功能,而不會影響驅動程序的開發。


二、實戰

對於Android的體系結構,通過上面的講解,還是比較抽象,下面將通過具體的一個模塊Audio來舉例說明。先展示一張Audio的體系結構圖:

Audio architecture

  • Application framework, 應用程序框架包括使用android.media API與audio硬件交互的app代碼。在內部,這個代碼調用相應的JNI類來訪問與audio硬件交互的native代碼。

  • JNI, JNI代碼關聯android.media調用native代碼來訪問audio硬件. JNI代碼位於frameworks/base/core/jni/frameworks/base/media/jni.

  • Native framework, native框架提供一個相當於android.media包的本地框架,調用IPC代理來訪問媒體服務器的音頻專用的服務。native框架代碼位於frameworks/av/media/libmedia.

  • Binder IPC, IPC代理可跨進程通信,該代理位於frameworks/av/media/libmedia,並以字母”I”開頭。

  • Media server,媒體服務包括audio服務,是真正與HAL實現層交互的代碼。media server代碼位於frameworks/av/services/audioflinger.

  • HAL,HAL定義了audio服務調用的標准接口,audio硬件必須正確實現的功能。 audio HAL層接口位於hardware/libhardware/include/hardware.關於更多可查看hardware/audio.h.

  • Kernel driver,audio驅動是與硬件和HAL實現的交互。可以使用Linux聲音架構(ALSA),開發聲音系統(OSS),或者自定義的驅動(HAL與驅動程序無關)。

三、小結

通過對Android體系的從上層到底層的一個梳理過程,希望能對andorid源碼有完整的認識,對模塊調用有一個較清晰的體會。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved