編輯:開發入門
這是 Patrick Brady (Google) 在2008 Google I/O 所發表的演講「Anatomy & Physiology of an Android」 中,所提出的 Android HAL 架構圖。從這張架構圖我們知道,HAL 的目的是為了把 Android framework 與 Linux kernel 完整「隔開」。讓 Android 不至過度依賴 Linux kernel,有點像是「kernel independent」的意思,讓 android framework 的開發能在不考量驅動程式的前提下進行發展。
在 android 原始碼裡,HAL 主要的實作儲存於以下目錄:
1. libhardware_legacy/ - 過去的實作、採取程式庫模組的觀念進行
2. libhardware/ - 新版的實作、調整為 HAL stub 的觀念
3. ril/ - Radio Interface Layer
在 HAL 的架構實作成熟前(即圖1的規劃),我們先就目前 HAL 現況做一個簡單的分析。另外,目前 android 的 HAL 實作,仍舊散佈在不同的地方,例如 Camera、WiFi 等,因此上述的目錄並不包含所有的 HAL 程式碼。
採用Service架構方式是比較標準的做法,即圖上藍色線的部份;紅色線的部份為非Service架構式的做法。先前,在「android 驅動開發關鍵技術:HAL及移植要領」演講中最後所提出的一個LED範例,即是一種非架構式的做法,簡報上有一段範例程式碼,歡迎下載參考。 採取Service架構的方式,是建議的做法,當然因為這是標準架構,也應該採用。 Service在Android框架裡的角色是「存取底層硬體」,往上層的話,可以和應用程式溝通。因此,採用標準的Service做法,好處是在 資料存取(data communication)的處理較為系統化。這方面,android提供了標準的處理架構,後續再進行討論。 圖上的「core librarIEs」即是Service程式碼的實作,也就是,android應用程式透過JNI(Dalvik)來到Service這一層,再透過Service載入*.so檔;而非標準做法則是讓應用程式直接透過JNI來載入*.so檔。 不使用Service架構 紅色的過程,因為不使用Service架構,因此「框架整合」的工作量比較小,甚致大部份的實作都不需要改動框架本身。這樣的做法,就有點像是「跳過framework」的方式;相對的,此時應用程式開發者需要考慮的設計議題就比較多。 例如,當遇到block Operation時,是否需要獨立的Java thread來處理? --jollen 前二篇教學提到「採用Service架構整合HAL的做法」。這裡再針對HAL如何採用Service架構與框架整合做一個概念的介紹。 Android的Service分為二種:android Service與Native Service。 android Service Android Service又稱為Java Service,是實作在框架層(framework)裡的「Server」。這裡所講的「Service」是System Service,又稱為Server,與應用程式設計上所討論的Service(android.app.Service)不同。android Service以Java撰寫。 Native Service Native Service則是實作在Runtime層裡的Server。架構設計上,我們有二個選擇,一個是實作Android Service、再透過JNI與HAL stub溝通;另一個選擇是,跳過android Service,讓Application(Manager API)直接與Native Service溝通。 未來的android發展趨勢,應會以第二種做法為主,即Manager API直接與Native Service溝通,以達到更好的效能表現。
android HAL Introduction: libhardware and its legacy
VIEw more documents from Jollen Chen.
概述Android 包括一個應用程序框架、幾個應用程序庫和一個基於 Dalvik 虛擬機的運行時,所有這些都運行在 Linux® 內核之上。通過利用 Linux
簡介: IBM® Lotus® iNotes™ 8.5 包含了許多新特性。本系列的第三篇文章介紹了新的 Lotus iNotes
看一個圖先: 這是官網的Activity生命周期結構圖,從這個圖中可以看出Activity的生命周期函數挺多的,其實他的生命周期和以往我們看到的其他組件的生命周期一樣,
XMLvsJSON 應用程序真實的實時更新需要注意的是,樣例應用程序沒有實時地從 web 移動數據,盡管我們期盼一個真實應用程序。由於數據 feeds 取自原始資源文件