移植Android到不同的裝置
Android允許提供不同的硬體平台和驅動支援Android的運行。硬體抽象層(Hardware Abstraction Layer)提供了再Android平台軟體棧和硬體裝置之間的標準介面。另外,Android作業系統是開源的,可以協助你快速的開發軟體,讓軟硬體協同工作。
為了保證Android裝置的高品質和對使用者的統一使用者體驗,必須通過相容測試包(Compatibility test suite). CTS能搞保證任何人開發的裝置符合統一的標準,並且應用可以可靠的運行,並且有著良好的體驗。
Android底層系統架構
在你將Android移植到你的硬體裝置之前,對android在更高的層次上如何工作有一個瞭解非常重要。因為驅動和HAL和Android系統的其他部分的源碼有很多互動,因此理解這部分對你學習整個AOSP(Android Open Source Project)源碼的其他部分十分重要。下面這張圖說明了再系統層次Android是如何工作的。
圖1.Android系統架構
應用程式框架(Application Framework)
這一層是大部分應用軟體開發人員需要關心的。這裡需要明白對於開發人員可用的應用編程介面(API),許多介面和下層的HAL介面提供的功能相同,所以這部分可以協助瞭解如何?驅動。
Binder處理序間通訊
Binder處理序間通訊機制允許應用程式架構跨進程調用Android系統服務提供的功能。這基本上允許高層的架構API可以和Android系統服務進行互動。從應用程式框架的層次看,所有的通訊對開發人員是隱藏的,事情看起來“工作的非常好”。
系統服務
應用程式框架層API提供的大部分功能需要和系統服務進行通訊來訪問底層的硬體。服務被人為的分為不同的功能模組,這些模組完成不同的功能,比如視窗管理器,搜尋服務和通知管理器(Notification Manager).系統服務被分在兩個組裡:系統(system)和多媒體(media).system(系統)服務包括視窗和通知管理器等。多媒體服務包括所有播放和錄製多媒體相關的服務。
硬體抽象層(Hardware Abstraction Layer)
HAL為Android系統調用底層驅動提供了一個標準的介面,同時屏蔽了底層驅動和硬體的具體實現。你必須為產品上的硬體實現相應的硬體抽象介面或驅動。Android並不強制要求驅動和HAL實現的標準介面,你可以根據你產品的實際狀況作出調整。然而,你必須保證所有的HAL介面實現可以正確的和底層硬體互動。所有的HAL實現都被編譯成為一個動態連結程式庫。
Linux核心
開發Android裝置驅動和開發標準的Linux裝置驅動相同。Android使用了一個特殊版本的Linux,添加了一些裝置驅動比如wakelock,一個記憶體管理系統,Binder處理序間通訊驅動等對嵌入式平台非常重要的功能。這些新添加的功能主要和系統功能相關。你可以使用任何版本的核心,只要支援特定的功能,例如binder驅動。然而,我們推薦使用最新版的AndroidKernel。