Android 13 包含 android.hardware.health
AIDL HAL,這是從 health@2.1 HAL 轉換而來。這個新 HAL 具有下列優點:
- 移除未使用的充電器相關 API
- 移除未使用的
StorageAttribute
和相關欄位 - 支援底座充電。
Android 11 包含 android.hardware.health
HAL 2.1,這是從 health@2.0 HAL 升級的次要版本。這個新 HAL 具有下列優點:
- 更清楚區分架構和供應商程式碼。
- 健康資訊報告的供應商自訂自由度更高。
- 除了電池,還能查看更多裝置健康度資訊。
本頁面提供實作 Health 2.1 HAL 的說明文件,以供參考。
需求條件
本節包含 Android 11、12 和 13 以上版本的相關規定。
搭載 Android 11 和 Android 12 的裝置
搭載 Android 11 和 12 的裝置必須提供 2.1 HAL 或 AIDL HAL。如果裝置並非搭載 Android 11 或 12,但計畫將供應商映像檔更新至目標架構相容性矩陣版本 5 (Android 11 中發布) 或 6 (Android 12 中發布),則必須移除現有的 2.0 HAL 實作項目,並提供 2.1 HAL 或 AIDL HAL。如果裝置不是搭載 Android 11 推出,且不打算更新供應商映像檔,也建議提供 2.1 或 AIDL HAL。
AOSP 包含多個輔助程式庫,可協助您實作 2.1 HAL,並從舊版 HIDL HAL 遷移。
搭載 Android 13 以上版本的裝置
搭載 Android 13 的裝置必須提供 AIDL HAL (不得提供 HIDL HAL)。如果裝置並非搭載 Android 13 推出,但計畫將供應商映像檔更新至目標架構相容性矩陣第 7 版 (Android 13 中發布),則必須移除現有的 HIDL HAL 實作項目,並提供 AIDL HAL。如果裝置並非搭載 Android 13 推出,且不打算更新供應商映像檔,也建議提供 AIDL HAL。
AOSP 包含多個輔助程式庫,可協助您實作 AIDL HAL,並從舊版 HIDL HAL 遷移。
術語
閱讀 Android 系統健康狀態文件其餘內容前,請先瞭解下列術語:
- health@2.1
- 縮寫
android.hardware.health@2.1
。Android 11 發布了健康狀態 HIDL 第 1 版。 - 健康 AIDL HAL
- 縮寫
android.hardware.health
。Android 13 中發布了健康 AIDL HAL 第 1 版。 - 充電器
- 在關機充電模式下執行的可執行檔,顯示手機充電動畫。
- 復原
- 在復原模式下執行的可執行檔,必須擷取電池資訊。
- storaged
- :負責擷取儲存空間資訊,並提供給架構的常駐程式。
Android 11 和 12 中的健康資料
在 Android 11 和 12 中,健康狀態元件的運作方式如下圖所示:
[system]
| getService()
V
[health@2.1-service]
| getService(stub=true)
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
其他模式:
[ charger ]
| getService() | (legacy code path)
V +-------------------------------------------------+
[health@2.1-service] |
| getService(stub=true) |
V |
[ health@2.0-impl-2.1-<device>.so ] |
| | (device-dependent linkage) |
V V |
+---------Helper libs for impl--------+ [libhealthd.device] |
| [libhealthloop (uevent, wakealarm)] | |
| [libhealth2impl (IHealth impl) ] | <---------------------------------+
| [libbatterymonitor (battery) ] |
+-------------------------------------+
[recovery]
| getService() w/o hwservicemanager
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
不同模式的簡化圖如下:
圖 1. 健康狀態 HIDL HAL 2.1 基礎架構。
Android 13 的健康功能
Android 13 推出健康狀態 AIDL HAL。圖 2 詳細說明健康元件的運作方式:
圖 2. 健康 AIDL HAL 基礎架構。
HIDL HAL 介面 2.1
health@2.1 HAL 支援關機充電,並提供更多電池相關資訊。
getHealthConfig
:擷取這個 HAL 的設定getHealthInfo_2_1
:次要版本升級至getHealthInfo
shouldKeepScreenOn
:判斷是否應在充電器模式下保持螢幕開啟
此外,實作 @2.1::IHealth
時,必須支援其繼承的 registerCallback
和 unregisterCallback
函式。@2.1::IHealthInfoCallback
新的回呼介面會使用 healthInfoChanged_2_1
函式,而非沿用的 healthInfoChanged
函式,將健康狀態資訊傳回給用戶端。
系統會使用回呼和 getHealthInfo_2_1
傳回新的結構體 @2.1::HealthInfo
。這個結構體包含透過 health@2.0 HAL 取得的其他裝置健康資訊,包括:
- 電池容量等級
- 目前電池充飽電所需時間 (以秒為單位)
- 電池充飽電設計容量 (以 μAh 為單位)
圖 3 顯示有助於健康狀態 HAL 實作的類別 UML 圖:
圖 3. 健康 HAL 2.1 UML 圖表。
如要瞭解如何實作 Health 服務 2.1,請參閱「實作 Health 2.1」。
AIDL HAL 介面第 1 版
本節包含 AIDL HAL 介面第 1 版的相關資訊。
API 變更
AIDL 第 1 版 HAL 支援與 HIDL 2.1 HAL 類似的 API。與 HIDL 2.1 介面相比,API 的變更如下:
- HIDL HAL 2.1 中導入的充電器相關 API 不會移植到 AIDL HAL。由於關機充電功能只存在於
/vendor
分割區,因此不需要 Vendor Interface 的 API。如要正確實作關機模式充電功能,請參閱充電器。 - 系統會移除「類型」
StorageAttribute
和相關欄位,因為這些欄位未派上用場。 chargerDockOnline
已新增至HealthInfo
,支援底座充電。
實作
圖 4 顯示有助於實作健康狀態 AIDL HAL 的類別 UML 圖:
圖 4. 健康 AIDL HAL UML 圖表。
如要瞭解如何實作健康 AIDL 服務,請參閱「實作健康 AIDL HAL」。
復原
Android 13 支援在復原模式中使用繫結器。安裝 Health AIDL 服務以進行復原,可讓服務在復原模式下執行。
如要瞭解如何將健康狀態 AIDL 服務安裝至復原模式,請參閱下列內容:
充電器
關機充電功能已從 /system
移至 /vendor
。如果裝置搭載 Android 13 推出,且支援關機充電,HAL 服務二進位檔就必須支援充電器模式。如要這麼做,請參閱實作充電器。
充電器系統屬性
/vendor
中的 charger
二進位檔無法再讀取 ro.charger.*
屬性。如果裝置已設定任何 ro.charger.*
系統屬性,請參閱充電器系統屬性。