Здоровье 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 имеет следующие преимущества:

  • Легче реализовать
  • Лучшее соответствие с существующими API 2.0 HAL
  • Лучшее разделение высоких частот в коде зарядки в выключенном состоянии
  • Улучшенная поддержка платформы для индикации состояния батареи устройства.

Android 13 включает android.hardware.health AIDL HAL, преобразованный из health@2.1 HAL. Этот новый HAL имеет следующие преимущества:

  • Удалите неиспользуемые API, связанные с зарядным устройством.
  • Удалить неиспользуемые StorageAttribute и связанные поля
  • Поддержка зарядки док-станции.

Требования

Устройства под управлением Android 9 и Android 10

Устройства, запускаемые с Android 9, должны предоставлять HAL 2.x (и не должны предоставлять HAL 1.0) или AIDL HAL. Устройства, не запускаемые с Android 9, но планирующие обновить образ поставщика до версии 3 матрицы совместимости целевой платформы (выпущенной в Android 9), должны удалить существующие реализации HAL 1.0 и предоставить HAL 2.x или AIDL HAL.

AOSP включает в себя несколько вспомогательных библиотек, разработанных для помощи в реализации HAL 2.0 и переходе от старого HAL 1.0.

Устройства под управлением Android 11 и Android 12

Устройства, запускаемые с Android 11, должны предоставлять HAL 2.1 (и не должны предоставлять HAL 1.0 или 2.0) или AIDL HAL. Устройства, не запускаемые с Android 11, но планирующие обновить образ поставщика до версии 5 матрицы совместимости целевой платформы (выпущенной в Android 11), должны удалить существующие реализации HAL 2.0 и предоставить HAL 2.1 или AIDL HAL. Устройствам, которые не запускаются с Android 11 и не планируют обновлять образ поставщика, также рекомендуется предоставлять HAL версии 2.1.

AOSP включает в себя несколько вспомогательных библиотек, разработанных для помощи в реализации HAL версии 2.1 и переходе от старой версии HAL версии 1.0.

Устройства под управлением Android 13 и выше

Устройства, запускаемые с Android 13, должны предоставлять AIDL HAL (и не должны предоставлять HIDL HAL). Устройства, не запускаемые с Android 13, но планирующие обновить образ поставщика до версии 7 матрицы совместимости целевой платформы (выпущенной в Android 13), должны удалить существующие реализации HIDL HAL и предоставить AIDL HAL. Устройствам, которые не запускаются с Android 13 и не планируют обновлять образ поставщика, также рекомендуется предоставить AIDL HAL.

Устройства не должны предоставлять HAL HIDL 1.0.

AOSP включает в себя несколько вспомогательных библиотек, разработанных для помощи в реализации AIDL HAL и переходе от старых HIDL HAL.

Терминология

  • здоровье@1.0 : сокращение от android.hardware.health@1.0 . Относится к работоспособности HIDL HAL версии 1.0, выпущенной в Android 8.0.
  • здоровье@2.0 : сокращение от android.hardware.health@2.0 . Относится к работоспособности HIDL HAL версии 2.0, выпущенной в Android 9.
  • здоровье@2.1 : сокращение от android.hardware.health@2.1 . Относится к работоспособности HIDL HAL версии 2.1, выпущенной в Android 11.
  • здоровье AIDL HAL : сокращение от android.hardware.health .
    • Версия 1 выпущена в Android 13.
  • Charger : исполняемый файл, работающий в выключенном режиме зарядки, который отображает анимацию зарядки телефона.
  • recovery : исполняемый файл, работающий в режиме восстановления, который должен получить информацию о батарее.
  • healthd : устаревший демон, работающий в Android, который извлекает информацию, связанную со здоровьем, и предоставляет ее фреймворку.
  • storaged : демон, работающий в Android, который извлекает информацию о хранилище и предоставляет ее фреймворку.

Здоровье в Android 8.x

В Android 8.x компонент работоспособности работает, как показано на следующей схеме:

Здоровье в Android 8.x

Рисунок 1 . Здоровье в Android 8.x

На этой диаграмме:

  • Один (1) вызов связывателя и один (1) вызов hwbinder используются платформой для связи с оборудованием.
  • healthd статически связывается с libhealthd_android , libbatterymonitor и libbatteryservice .
  • health@1.0-impl статически ссылается на libhealthd. BOARD .

Каждая доска может настроить свой libhealthd. BOARD ; во время сборки определяется, на что ссылаются зарядное устройство, Health@1.0-impl и восстановление.

Для других режимов:

Выключение режима зарядки и режима восстановления в Android 8.x

Рисунок 2. Здоровье в Android 8.x, выключенный режим зарядки и режим восстановления

  • зарядное устройство статически ссылается на libhealthd. BOARD , libhealthd_charger и libbatterymonitor .
  • recovery статически ссылается на libhealthd. BOARD и libbatterymonitor .

Здоровье в 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)      ] |
+-------------------------------------+

Если реализация работоспособности 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)      ] |
+-------------------------------------+

См. следующую упрощенную схему для различных режимов:

Инфраструктура Health HAL 2.1

Рис. 5. Инфраструктура работоспособности HAL 2.1

Здоровье в Android 13

В Android 13 представлен Health AIDL HAL. Компонент здоровья работает, как показано на следующей схеме:

Инфраструктура Health AIDL HAL

Рисунок 6. Инфраструктура Health AIDL HAL

Интерфейс HIDL HAL 2.0

Health@2.0 HAL обеспечивает ту же функциональность для платформы, что и старый демон healthd. Он также предоставляет API, которые аналогичны тому, что Healthd ранее предоставлял в качестве связующего сервиса (например , 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, в том числе:

  • Информация о зарядке (переменный ток/USB/беспроводная связь, ток, напряжение и т. д.)
  • Информация о батарее (наличие, уровень заряда батареи, ток, напряжение, заряд, технология и т. д.)
  • Информация о хранилище (информация об устройстве хранения, статистика диска)

Сведения о внедрении службы работоспособности 2.0 см. в разделе Реализация работоспособности 2.0 .

Интерфейс HIDL HAL 2.1

Health@2.1 HAL поддерживает зарядку в выключенном состоянии и предоставляет дополнительную информацию об аккумуляторе.

Основной интерфейс IHealth предоставляет следующие дополнительные функции.

  • getHealthConfig : для получения конфигурации этого HAL
  • getHealthInfo_2_1 : обновление младшей версии до getHealthInfo
  • shouldKeepScreenOn : чтобы определить, должен ли экран оставаться включенным в режиме зарядки.

Кроме того, реализация @2.1::IHealth требуется для поддержки @2.1::IHealthInfoCallback для его унаследованных функций registerCallback и unregisterCallback . Новый интерфейс обратного вызова возвращает информацию о работоспособности клиенту, используя его функцию healthInfoChanged_2_1 вместо унаследованной функции healthInfoChanged .

Новая структура @2.1::HealthInfo возвращается с помощью обратных вызовов и getHealthInfo_2_1 . Эта структура содержит дополнительную информацию о работоспособности устройства, доступную через Health@2.0 HAL, в том числе:

  • Уровень заряда батареи
  • Время полной зарядки аккумулятора сейчас (в секундах)
  • Расчетная емкость аккумулятора при полном заряде (в мкАч)

См. следующую диаграмму UML для классов, полезных для реализации HAL работоспособности:

Диаграмма Health 2.1 HAL UML

Рис. 7. Диаграмма работоспособности HAL 2.1 UML

Сведения о реализации службы работоспособности 2.1 см. в разделе Реализация работоспособности 2.1 .

Интерфейс AIDL HAL версии 1

Изменения API

HAL AIDL версии 1 поддерживает API-интерфейсы, аналогичные HAL HIDL 2.1. По сравнению с интерфейсом HIDL 2.1 в API изменено следующее:

  • API-интерфейсы, связанные с зарядными устройствами, представленные в HIDL HAL 2.1, не перенесены в AIDL HAL. Поскольку функция зарядки в выключенном состоянии существует только в разделе /vendor , API-интерфейсы в интерфейсе поставщика не нужны. Чтобы правильно реализовать зарядку в выключенном состоянии, см. зарядное устройство ниже.
  • Тип StorageAttribute и связанные поля удаляются, поскольку они не используются.
  • chargerDockOnline добавлен в HealthInfo для поддержки зарядки док-станции.

Реализация

См. следующую диаграмму UML для классов, полезных для реализации HAL работоспособности:

Диаграмма Health AIDL HAL UML

Рис. 8. Диаграмма Health AIDL HAL UML

Сведения о реализации службы работоспособности AIDL см. в разделе Реализация работоспособности AIDL HAL .

Восстановление

Android 13 поддерживает связывание в режиме восстановления. Установка службы Health AIDL для восстановления позволяет ей работать в режиме восстановления.

Сведения об установке службы работоспособности AIDL для восстановления см. в следующих разделах:

Зарядное устройство

Функциональность зарядки в выключенном состоянии перенесена из /system в /vendor . Для устройств, запускаемых с Android 13, если они поддерживают зарядку в выключенном состоянии, двоичный файл службы HAL должен поддерживать режим зарядки. Для этого обратитесь к реализации зарядного устройства .

Свойства системы зарядного устройства

Свойства ro.charger.* больше не читаются двоичным файлом charger в /vendor . Если на вашем устройстве установлены какие-либо системные свойства ro.charger.* , см. системные свойства для зарядного устройства .