Android 運行狀況
Android 9 引入了從 [email protected] HAL 升級的主要版本 android.hardware.health
HAL 2.0。新版 HAL 具有以下優勢:
- 框架代碼和供應商代碼之間的區別更清楚。
- 棄用了不必要的
healthd
守護進程。 - 供應商對運行狀況信息報告進行自定義的自由度更高。
- 更多設備運行狀況信息(不僅包括電池信息)。
要求
搭載 Android 9 的設備必須提供 2.0 HAL(而不得提供 1.0 HAL)。未搭載 Android 9 但計劃將供應商映像更新爲 Target Framework Compatibility Matrix 版本 3(Android 9 中發佈的版本)的設備必須移除現有的 1.0 HAL 實現,並提供 2.0 HAL。
AOSP 包含多個輔助程序庫,旨在幫助您實現 2.0 HAL 以及完成從舊版 1.0 HAL 的過渡。
術語
- [email protected]:
[email protected]
的縮寫,指的是 Android 8.0 中發佈的運行狀況 HIDL 的 1.0 版 HAL。 - [email protected]:
[email protected]
的縮寫,指的是 Android 9 中發佈的運行狀況 HIDL 的 2.0 版 HAL。 - charger:在關機模式充電過程中運行的可執行文件,用於顯示手機充電動畫。
- recovery:在恢復模式下運行的可執行文件,必須檢索電池信息。
- healthd:在 Android 中運行的舊版守護進程,用於檢索與運行狀況相關的信息並將其提供給框架。
- storaged:在 Android 中運行的守護進程,用於檢索存儲信息並將其提供給框架。
Android 8.x 中的“運行狀況”服務
在 Android 8.x 中,運行狀況組件的工作原理詳情如下圖所示:
圖 1. Android 8.x 中的“運行狀況”服務
在此圖中:
- 框架通過一 (1) 次 Binder 調用和一 (1) 次 hwbinder 調用與硬件進行通信。
healthd
靜態鏈接到libhealthd_android
、libbatterymonitor
和libbatteryservice
。- [email protected] 靜態關聯到
libhealthd.BOARD
。
每個開發板都可以自定義不同的 libhealthd.BOARD
;charger、[email protected] 和 recovery 關聯到哪個開發板是在編譯時確定的。
對於其他模式:
圖 2. Android 8.x 中的運行狀況、關機模式充電和恢復模式
- charger 靜態關聯到
libhealthd.BOARD
、libhealthd_charger
和libbatterymonitor
。 - recovery 靜態關聯到
libhealthd.BOARD
和libbatterymonitor
。
Android 9 中的“運行狀況”服務
在 Android 9 中,運行狀況組件的工作原理詳情如下圖所示:
圖 3. Android 9 中的“運行狀況”服務
該框架嘗試從 hwservicemanager
中檢索 [email protected] 服務。如果檢索失敗,它將調用 [email protected](在 Android 8.x 中提供)。同時,它還會保留原有代碼路徑,以便 Android 9 系統映像與 Android 8.x 供應商映像兼容。框架不會同時從兩個 HAL 中檢索信息,因爲設備上只能存在一個服務版本(1.0 或 2.0)。
注意:對於原有代碼路徑,進程/庫將一直保留到 [email protected] 被棄用。
對於其他模式:
圖 4. Android 9 中的運行狀況、關機模式充電和恢復模式
HAL 接口
[email protected] HAL 爲框架提供了與舊版 healthd 守護進程相同的功能。此外,它還提供了與 healthd 以前作爲 Binder 服務提供的 API 類似的 API(即 IBatteryPropertiesRegistrar)。
主界面 IHealth 提供以下函數:
registerCallback
,用於替換IBatteryPropertiesRegistrar.registerListener
unregisterCallback
,用於替換IBatteryPropertiesRegistrar.unregisterListener
update
,用於替換IBatteryPropertiesRegistrar.scheduleUpdate
IBatteryPropertiesRegistrar.getProperties
將由以下內容替換:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
此外,IHealth
還爲 storaged
提供了以下新 API,以檢索特定於供應商的存儲相關信息:
getStorageInfo
getDiskStats
通過回調和 getHealthInfo
返回一個新結構 @2.0::HealthInfo
,此結構包含可通過 [email protected] HAL 訪問的所有設備運行狀況信息,包括:
- 充電信息(交流電/USB/無線、電流、電壓等)
- 電池信息(狀態、電池電量、電流、電壓、充電、技術等)
- 存儲信息(存儲設備信息、磁盤統計信息)
要詳細瞭解如何實現“運行狀況”服務,請參閱實現“運行狀況”。