編輯:關於Android編程
Android系統體系架構圖:
Android系統體系架構分為5層,自頂而下分別是:
應用框架,對於App開發者使用最為頻繁。而硬件開發者,只需要認識到這些APIs是HAL層接口的映射就可以了。
Binder Inter-Process Communication(IPC),進程間通信機制允許framework來跨進程邊界,來調用Android的系統服務的代碼,這使得框架API與Android系統服務能夠進行交互。對於開發者來說,這種通信機制是隱藏的。
功能是通過framework APIs與系統服務通信,以實現底層硬件的訪問。服務是模塊化的,主要部件如Window Manager, Search Service,或者Notification Manager.Android包括兩類服務:系統服務(如Window Manager,Notification Manager)和媒體服務(包括播放和錄制的媒體服務)。
硬件抽象層(HAL)定義了一個標准接口用於硬件廠商的實現. HAL允許功能實現,而不會影響或修改上層的系統。HAL的實現被打包成模塊(.so)文件,並在適當的時候被加載進Android系統。
硬件抽象層組件
標准HAL結構 每個特定的硬件HAL接口特性被定義在hardware/libhardware/include/hardware/hardware.h
,這保證HAL具有可預測的結構。該接口允許Android系統來加載相應HAL模塊的正確版本。HAL接口有兩個通用組件:模塊與設備。
HAL模塊 HAL的實現被用於構建成模塊(.so)文件,並在適當的時機通過Android動態鏈接到系統。你可以通過為每一個HAL的實現創建Android.mk
文件並指向源碼文件,來實現將其構建到系統中。一般來說,你的共享庫必須被命名為符合規定的格式,以保證他們能被找到被正確加載。命名模式為為 <module_type>:<device_name>
.
開發設備驅動程序類似於開發一個典型的Linux設備驅動程序。Android使用Linux內核,再加上一些特殊的特性,如wake locks, Binder IPC驅動,以及用於移動嵌入式平台重要的其他功能。這些增加主要用於系統功能,而不會影響驅動程序的開發。
對於Android的體系結構,通過上面的講解,還是比較抽象,下面將通過具體的一個模塊Audio來舉例說明。先展示一張Audio的體系結構圖:
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源碼有完整的認識,對模塊調用有一個較清晰的體會。
源碼位於github上(本人fork地址):點擊進入地址效果圖:使用方法:下載源碼後 解壓其中的文件夾library 到任意地方 修改library中gragle 其方法
一、網頁打開APP簡介Android有一個特性,可以通過點擊網頁內的某個鏈接打開APP,或者在其他APP中通過點擊某個鏈接打開另外一個APP(AppLink),一些用戶量
應用場景: 在App開發中,對於信息的獲取與演示,不可能全部將其獲取與演示,為了在用戶使用中,給予用戶以友好、方便的用戶體驗,以滑動、下拉的效果動態加載數據的要求就會出
側滑菜單在很多應用中都會見到,最近QQ5.0側滑還玩了點花樣~~對於側滑菜單,一般大家都會自定義ViewGroup,然後隱藏菜單欄,當手指滑動時,通過Scr