Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

Android健康

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啟動但計劃將供應商映像更新為Target Framework Compatibility Matrix Version 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.0android.hardware.health@1.0縮寫。指的是Android 8.0中發布的Health HIDL HAL 1.0版。
  • health@2.0android.hardware.health@2.0縮寫。指的是Android 9中發布的健康HIDL HAL 2.0版。
  • health@2.1android.hardware.health@2.1縮寫。指的是在Android 11中發布的Health HIDL HAL 2.1版。
  • charger :以關閉模式運行的可執行文件,顯示電話正在播放的動畫。
  • recovery :以恢復模式運行的可執行文件,必須檢索電池信息。
  • healthd :在Android中運行的舊版守護程序,可檢索與健康相關的信息並將其提供給框架。
  • storaged :在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中的健康

該框架嘗試從hwservicemanager檢索health@2.0服務。如果失敗,它將調用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)      ] |
+-------------------------------------+

如果不存在運行狀況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守護程序相同。它還提供了與以前作為活頁夾服務(即IBatteryPropertiesRegistrar )提供的健康版本相似的API。

主界面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 。此結構包含可通過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函數將健康狀況信息返回給客戶端。

通過回調和getHealthInfo_2_1返回一個新結構@2.1::HealthInfo 。此結構包含可通過health@2.0 HAL獲得的其他設備健康信息,包括:

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

有關實施Health Service的信息,請參閱《 實施Health》