安卓健康

Android的9包括android.hardware.health HAL 2.0,從health@1.0 HAL的重大版本升級。這種新的 HAL 具有以下優點:

  • 框架和供應商代碼之間更清晰的分離。
  • 不贊成不必要的healthd守護進程。
  • 在健康信息報告中為供應商定制提供了更大的自由度。
  • 更多的設備健康信息而不僅僅是電池。

Android的11包括android.hardware.health HAL 2.1,從health@2.0 HAL次版本升級。這種新的 HAL 具有以下優點:

  • 更容易實施
  • 更好地符合現有 2.0 HAL API
  • 關閉模式充電代碼中更好的高音分離
  • 更好地支持框架以指示設備的電池健康狀況

要求

搭載 Android 9 的設備必須提供 2.0 HAL(並且不得提供 1.0 HAL)。未隨 Android 9 啟動但計劃將供應商映像更新到目標框架兼容性矩陣版本 3(在 Android 9 中發布)的設備必須刪除現有的 1.0 HAL 實現並提供 2.0 HAL。

搭載 Android 11 的設備必須提供 2.1 HAL(並且不得提供 1.0 或 2.0 HAL)。未隨 Android 11 啟動但計劃將供應商映像更新到 Target Framework Compatibility Matrix Version 5(在 Android 11 中發布)的設備必須刪除現有的 2.0 HAL 實現並提供 2.1 HAL。未啟動 Android 11 且不打算更新供應商映像的設備也建議提供 2.1 HAL。

AOSP 包含多個幫助程序庫,旨在幫助您實現 2.1 HAL 和從舊的 1.0 HAL 的轉換。

術語

  • health@1.0:縮寫android.hardware.health@1.0 。指在Android 8.0 中發布的健康HIDL HAL 1.0 版。
  • health@2.0:縮寫android.hardware.health@2.0 。指的是Android 9中發布的健康HIDL HAL 2.0版。
  • health@2.1:縮寫android.hardware.health@2.1 。指的是 Android 11 中發布的健康 HIDL HAL 2.1 版。
  • 充電器:可執行運行在關閉模式下的充電顯示的電話充電動畫。
  • 恢復:在恢復模式下運行可執行文件必須獲取電池信息。
  • healthd:在Android的遺產守護進程運行檢索健康相關的信息並提供給框架。
  • 蓄能:守護進程運行Android檢索存儲信息並提供給框架。

Android 8.x 中的健康

在 Android 8.x 中,健康組件的工作原理如下圖所示:

Android 8.x 中的健康

圖1。 Android 8.x 中的健康

在這張圖中:

  • 框架使用一 (1) 個綁定器調用和一 (1) 個 hwbinder 調用與硬件進行通信。
  • healthd靜態鏈接到libhealthd_androidlibbatterymonitorlibbatteryservice
  • health@1.0-impl靜態鏈接到libhealthd. BOARD

每塊板可以自定義不同的libhealthd. BOARD ;在構建時確定充電器、health@1.0-impl 和恢復鏈接到什麼。

對於其他模式:

Android 8.x 中的關閉模式充電和恢復模式

圖2.健康的Android 8.x中,關斷模式下的充電和恢復模式

  • 充電器靜態鏈接到libhealthd. BOARDlibhealthd_chargerlibbatterymonitor
  • 恢復靜態鏈接到libhealthd. BOARDlibbatterymonitor

Android 9 中的健康

在 Android 9 中,健康組件的工作原理如下圖所示: Android 9 中的健康

圖3。 Android 9 中的健康

該框架嘗試從檢索health@2.0服務hwservicemanager 。如果失敗,它會調用 health@1.0(在 Android 8.x 中)。保留舊代碼路徑,以便 Android 9 系統映像與 Android 8.x 供應商映像兼容。該框架不會從兩個 HAL 中檢索信息,因為設備上只能存在一個服務版本(1.0 或 2.0)。

對於其他模式:

Android 9 中的關閉模式充電和恢復

圖4.健康的Android 9,關閉模式和充電模式恢復

Android 11 中的健康

在 Android 11 中,健康組件的工作原理如下圖所示:

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

如果 Health 2.1 實現不存在,系統將回退到前幾節所述的遺留代碼路徑

對於其他模式:

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

HAL 接口 2.0

health@2.0 HAL 為框架提供與舊的 healthd 守護程序相同的功能。它還提供類似於什麼healthd以前作為粘合劑服務(即提供的API IBatteryPropertiesRegistrar )。

主界面, IHealth ,提供了如下功能:

  • registerCallback ,更換IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback ,更換IBatteryPropertiesRegistrar.unregisterListener
  • update ,更換IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties被替換如下:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

此外, IHealth提供了以下新的API storaged檢索特定供應商的存儲相關信息:

  • getStorageInfo
  • getDiskStats

一種新的結構, @2.0::HealthInfo ,通過回調並返回getHealthInfo 。此結構包含可通過 health@2.0 HAL 獲得的所有設備健康信息,包括:

  • 充電信息(AC/USB/無線、電流、電壓等)
  • 電池信息(存在、電池電量、電流、電壓、電量、技術等)
  • 存儲信息(存儲設備信息、磁盤統計)

HAL 接口 2.1

health@2.1 HAL 支持關閉模式充電並提供有關電池的更多信息。

主界面, IHealth ,提供以下附加功能

  • getHealthConfig :檢索此HAL的配置
  • getHealthInfo_2_1 :次版本升級到getHealthInfo
  • shouldKeepScreenOn :確定是否在屏幕應在充電器模式保持在

此外,實施@2.1::IHealth需要支持@2.1::IHealthInfoCallback其繼承registerCallbackunregisterCallback功能。利用其新的回調接口返回衛生健康信息給客戶端healthInfoChanged_2_1函數而不是繼承的healthInfoChanged功能。

一種新的結構, @2.1::HealthInfo ,通過回調並返回getHealthInfo_2_1 。此結構包含可通過 health@2.0 HAL 獲得的其他設備運行狀況信息,包括:

  • 電池容量水平
  • 現在電池充電時間(以秒為單位)
  • 電池滿充電設計容量(μAh)

有關實現衛生服務的信息,請參閱實現健康