Android 系統健康狀態

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)      ] |
+-------------------------------------+

不同模式的簡化圖如下:

健康狀態 HIDL HAL 2.1 基礎架構

圖 1. 健康狀態 HIDL HAL 2.1 基礎架構。

Android 13 的健康功能

Android 13 推出健康狀態 AIDL HAL。圖 2 詳細說明健康元件的運作方式:

健康 AIDL HAL 基礎架構

圖 2. 健康 AIDL HAL 基礎架構。

HIDL HAL 介面 2.1

health@2.1 HAL 支援關機充電,並提供更多電池相關資訊。

主要介面「IHealth」提供下列額外功能

  • getHealthConfig:擷取這個 HAL 的設定
  • getHealthInfo_2_1:次要版本升級至 getHealthInfo
  • shouldKeepScreenOn:判斷是否應在充電器模式下保持螢幕開啟

此外,實作 @2.1::IHealth 時,必須支援其繼承的 registerCallbackunregisterCallback 函式。@2.1::IHealthInfoCallback新的回呼介面會使用 healthInfoChanged_2_1 函式,而非沿用的 healthInfoChanged 函式,將健康狀態資訊傳回給用戶端。

系統會使用回呼和 getHealthInfo_2_1 傳回新的結構體 @2.1::HealthInfo。這個結構體包含透過 health@2.0 HAL 取得的其他裝置健康資訊,包括:

  • 電池容量等級
  • 目前電池充飽電所需時間 (以秒為單位)
  • 電池充飽電設計容量 (以 μAh 為單位)

圖 3 顯示有助於健康狀態 HAL 實作的類別 UML 圖:

健康 2.1 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 圖:

健康 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.* 系統屬性,請參閱充電器系統屬性