Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Android Health

Android 9에는 health@1.0 HAL의 주 버전 업그레이드인 android.hardware.health HAL 2.0이 포함되어 있습니다. 이 새로운 HAL의 장점은 다음과 같습니다.

  • 프레임워크와 공급업체 코드 간의 명확한 구분
  • 불필요한 healthd 데몬 지원 중단
  • 상태 정보 보고서에서 공급업체 맞춤설정 사항 확대
  • 배터리뿐 아니라 기기 상태 정보 세부화

Android 11에는 health@2.0 HAL의 부 버전 업그레이드인 android.hardware.health HAL 2.1이 포함되어 있습니다. 이 새로운 HAL의 장점은 다음과 같습니다.

  • 손쉬운 구현
  • 기존 2.0 HAL API와의 적합성 개선
  • 오프 모드 충전 코드에서 Treble 구분 개선
  • 기기 배터리 상태를 나타내도록 프레임워크 지원 개선

요구사항

Android 9로 출시되는 기기는 2.0 HAL 버전을 제공해야 합니다(1.0 HAL을 제공하면 안 됩니다). Android 9에서 출시되지 않고 벤더 이미지를 Target Framework Compatibility Matrix 버전 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 버전 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에서 출시된 health HIDL HAL 버전 1.0을 참고하세요.
  • health@2.0: android.hardware.health@2.0의 약어입니다. Android 9에서 출시된 health HIDL HAL 버전 2.0을 참고하세요.
  • health@2.1: android.hardware.health@2.1의 약어입니다. Android 11에서 출시된 health HIDL HAL 버전 2.1을 참고하세요.
  • charger: 휴대전화 충전 애니메이션이 표시되는 오프 모드 충전으로 실행되는 파일입니다.
  • recovery: 배터리 정보를 검색해야 하는 복구 모드에서 실행되는 파일입니다.
  • healthd: Android에서 실행되는 기존 데몬이며, health 관련 정보를 검색하고 이를 프레임워크에 제공합니다.
  • storaged: Android에서 실행되는 데몬이며, 저장소 정보를 검색하여 프레임워크에 제공합니다.

Android 8.x의 Health

Android 8.x에서 health 구성요소는 다음 다이어그램과 같이 작동합니다.

Android 8.x의 Health

그림 1. Android 8.x의 Health

이 다이어그램에서,

  • 프레임워크는 하드웨어와 통신하기 위해 바인더 호출 1개와 hwbinder 호출 1개를 사용합니다.
  • healthdlibhealthd_android, libbatterymonitor, libbatteryservice에 정적으로 연결됩니다.
  • health@1.0-impl은 libhealthd.BOARD에 정적으로 연결됩니다.

각 보드는 다른 libhealthd.BOARD를 맞춤설정할 수 있으므로 빌드 시간에 charger, health@1.0-impl, 복구 링크가 결정됩니다.

기타 모드

Android 8.x의 오프 모드 충전 및 복구 모드

그림 2. Android 8.x의 Health, 오프 모드 충전 및 복구 모드

  • charger는 libhealthd.BOARD, libhealthd_charger, libbatterymonitor에 정적으로 연결됩니다.
  • recovery는 libhealthd.BOARDlibbatterymonitor에 정적으로 연결됩니다.

Android 9의 Health

Android 9에서 health 구성요소는 다음 다이어그램과 같이 작동합니다. Android 9의 Health

그림 3. Android 9의 Health

프레임워크는 hwservicemanager에서 health@2.0 서비스를 검색하려고 시도합니다. 실패하면 Android 8.x에서 health@1.0을 호출합니다. Android 9 시스템 이미지가 Android 8.x 공급업체 이미지와 호환되도록 기존 코드 경로가 보관됩니다. 기기에 하나의 서비스 버전(1.0 또는 2.0)만 존재할 수 있으므로 프레임워크는 두 개의 HAL 모두에서 정보를 검색하지 않습니다.

기타 모드

Android 9의 오프 모드 충전 및 복구 모드

그림 4. Android 9의 Health, 오프 모드 충전 및 복구 모드

Android 11의 Health

Android 11에서 health 구성요소는 다음 다이어그램과 같이 작동합니다.

[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는 다음 함수를 제공합니다.

  • IBatteryPropertiesRegistrar.registerListener를 대체하는 registerCallback
  • IBatteryPropertiesRegistrar.unregisterListener를 대체하는 unregisterCallback
  • IBatteryPropertiesRegistrar.scheduleUpdate를 대체하는 update
  • IBatteryPropertiesRegistrar.getProperties는 다음으로 대체됨
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

또한 IHealth는 공급업체별 저장소 관련 정보를 검색하도록 다음과 같은 storaged의 새 API를 제공합니다.

  • 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 구현은 상속된 registerCallbackunregisterCallback 함수의 @2.1::IHealthInfoCallback을 지원하는 데 필요합니다. 새 콜백 인터페이스는 상속된 healthInfoChanged 함수가 아닌 healthInfoChanged_2_1 함수를 사용하여 클라이언트에 상태 정보를 반환합니다.

새 구조체 @2.1::HealthInfo는 콜백과 getHealthInfo_2_1을 통해 반환됩니다. 이 구조체에는 다음을 포함하여 health@2.0 HAL을 통해 사용 가능한 추가 기기 상태 정보가 포함되어 있습니다.

  • 배터리 용량 수준
  • 배터리 충전 완료 시간(초)
  • 배터리 완전 충전 설계 용량(μAh)

Health 서비스 구현에 관한 자세한 내용은 Health 구현을 참고하세요.