Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Android Health

Android 9 bao gồm android.hardware.health HAL 2.0, một bản nâng cấp phiên bản chính từ health@1.0 HAL. HAL mới này có những ưu điểm sau:

  • Sự tách biệt rõ ràng hơn giữa khung và mã của nhà cung cấp.
  • Không chấp nhận trình nền healthd không cần thiết.
  • Nhiều mức độ tự do hơn để tùy chỉnh nhà cung cấp trong các báo cáo thông tin sức khỏe.
  • Nhiều thông tin về tình trạng của thiết bị hơn chỉ là pin.

Android 11 bao gồm android.hardware.health HAL 2.1, một bản nâng cấp phiên bản nhỏ từ health@2.0 HAL. HAL mới này có những ưu điểm sau:

  • Dễ thực hiện hơn
  • Tuân thủ tốt hơn với các API 2.0 HAL hiện có
  • Tách tiếng Treble tốt hơn trong mã sạc ngoài chế độ
  • Hỗ trợ tốt hơn cho khung cho biết tình trạng pin của thiết bị

Yêu cầu

Các thiết bị khởi chạy với Android 9 phải cung cấp 2.0 HAL (và không được cung cấp 1.0 HAL). Các thiết bị không khởi chạy với Android 9 nhưng dự định cập nhật hình ảnh nhà cung cấp lên Ma trận tương thích khung mục tiêu Phiên bản 3 (được phát hành trong Android 9) phải xóa các triển khai 1.0 HAL hiện có và cung cấp 2.0 HAL.

Các thiết bị khởi chạy với Android 11 phải cung cấp 2.1 HAL (và không được cung cấp 1.0 hoặc 2.0 HAL). Các thiết bị không khởi chạy với Android 11 nhưng dự định cập nhật hình ảnh nhà cung cấp lên Ma trận tương thích khung mục tiêu Phiên bản 5 (được phát hành trong Android 11) phải xóa các triển khai 2.0 HAL hiện có và cung cấp 2.1 HAL. Các thiết bị không chạy Android 11 và không có kế hoạch cập nhật hình ảnh nhà cung cấp cũng được khuyến nghị cung cấp 2.1 HAL.

AOSP bao gồm nhiều thư viện trợ giúp được thiết kế để giúp bạn triển khai 2.1 HAL và quá trình chuyển đổi từ 1.0 HAL cũ.

Thuật ngữ

  • health@1.0 : chữ viết tắt của android.hardware.health@1.0 . Đề cập đến tình trạng HIDL HAL phiên bản 1.0 được phát hành trong Android 8.0.
  • health@2.0 : chữ viết tắt của android.hardware.health@2.0 . Đề cập đến tình trạng HIDL HAL phiên bản 2.0 được phát hành trong Android 9.
  • health@2.1 : chữ viết tắt của android.hardware.health@2.1 . Đề cập đến tình trạng HIDL HAL phiên bản 2.1 được phát hành trong Android 11.
  • bộ sạc : thực thi đang chạy ở chế độ sạc tắt hiển thị hình ảnh động sạc điện thoại.
  • recovery : thực thi đang chạy ở chế độ khôi phục phải lấy thông tin về pin.
  • healthd : daemon kế thừa chạy trong Android lấy thông tin liên quan đến sức khỏe và cung cấp cho framework.
  • storaged : daemon chạy trong Android lấy thông tin lưu trữ và cung cấp cho framework.

Sức khỏe trong Android 8.x

Trong Android 8.x, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:

Sức khỏe trong Android 8.x

Hình 1 . Sức khỏe trong Android 8.x

Trong sơ đồ này:

  • Một (1) cuộc gọi liên kết và một (1) cuộc gọi hwbinder được khuôn khổ sử dụng để giao tiếp với phần cứng.
  • healthd liên kết tĩnh đến libhealthd_android , libbatterymonitorlibbatteryservice .
  • health@1.0-impl liên kết tĩnh đến libhealthd. BOARD .

Mỗi bảng có thể tùy chỉnh một libhealthd. BOARD khác nhau libhealthd. BOARD ; nó được xác định tại thời điểm xây dựng liên kết tới bộ sạc, health@1.0-impl và khôi phục nào.

Đối với các chế độ khác:

Chế độ khôi phục và ký tự ở chế độ tắt trong Android 8.x

Hình 2. Tình trạng trong Android 8.x, chế độ khôi phục và sạc tắt

  • bộ sạc liên kết tĩnh với libhealthd. BOARD , libhealthd_chargerlibbatterymonitor .
  • phục hồi liên kết tĩnh đến libhealthd. BOARDlibbatterymonitor .

Sức khỏe trong Android 9

Trong Android 9, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau: Sức khỏe trong Android 9

Hình 3 . Sức khỏe trong Android 9

Khuôn khổ cố gắng truy xuất dịch vụ hwservicemanager từ hwservicemanager . Nếu không thành công, nó sẽ gọi vào health@1.0 (trong Android 8.x). Đường dẫn mã kế thừa được giữ lại để hình ảnh hệ thống Android 9 tương thích với hình ảnh nhà cung cấp Android 8.x. Khuôn khổ không truy xuất thông tin từ cả hai HAL vì chỉ có một phiên bản dịch vụ (1.0 hoặc 2.0) có thể tồn tại trên thiết bị.

Đối với các chế độ khác:

Ghi nhớ và khôi phục ở chế độ tắt trong Android 9

Hình 4. Tình trạng trong Android 9, chế độ khôi phục và sạc ở chế độ tắt

Sức khỏe trong Android 11

Trong Android 11, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:

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

Nếu triển khai tình trạng 2.1 không tồn tại, hệ thống sẽ quay trở lại đường dẫn mã kế thừa như được mô tả trong các phần trước

Đối với các chế độ khác:

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

Giao diện HAL 2.0

Health@2.0 HAL cung cấp chức năng tương tự cho khuôn khổ như daemon healthd cũ. Nó cũng cung cấp các API tương tự như những gì mà healthd đã cung cấp trước đây dưới dạng dịch vụ chất kết dính (tức là IBatteryPropertiesRegistrar ).

Giao diện chính, IHealth , cung cấp các chức năng sau:

  • registerCallback , để thay thế IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback IBatteryPropertiesRegistrar.unregisterListener , để thay thế IBatteryPropertiesRegistrar.unregisterListener
  • update , để thay thế IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties được thay thế bằng:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Bên cạnh đó, IHealth cung cấp các API mới sau cho storaged để lấy thông tin liên quan lưu trữ nhà cung cấp cụ thể:

  • getStorageInfo
  • getDiskStats

Một cấu trúc mới, @2.0::HealthInfo , được trả về thông qua callbacks và getHealthInfo . Cấu trúc này chứa tất cả thông tin về tình trạng của thiết bị có sẵn qua health@2.0 HAL, bao gồm:

  • Thông tin sạc (AC / USB / không dây, dòng điện, điện áp, v.v.)
  • Thông tin về pin (sự hiện diện, mức pin, dòng điện, điện áp, mức sạc, công nghệ, v.v.)
  • Thông tin lưu trữ (thông tin thiết bị lưu trữ, thống kê đĩa)

Giao diện HAL 2.1

Health@2.1 HAL hỗ trợ sạc ở chế độ tắt và cung cấp thêm thông tin về pin.

Giao diện chính, IHealth , cung cấp các chức năng bổ sung sau

  • getHealthConfig : để truy xuất cấu hình của HAL này
  • getHealthInfo_2_1 : bản nâng cấp phiên bản nhỏ cho getHealthInfo
  • shouldKeepScreenOn : để xác định xem có nên để màn hình ở chế độ sạc không

Ngoài ra, việc triển khai @2.1::IHealth được yêu cầu để hỗ trợ @2.1::IHealthInfoCallback cho các chức năng registerCallbackunregisterCallback kế thừa của nó. Giao diện gọi lại mới trả về thông tin tình trạng sức khỏe cho ứng dụng khách bằng cách sử dụng hàm healthInfoChanged_2_1 của nó thay vì hàm healthInfoChanged kế thừa.

Một cấu trúc mới, @2.1::HealthInfo , được trả về thông qua callbacks và getHealthInfo_2_1 . Cấu trúc này chứa thông tin bổ sung về tình trạng của thiết bị có sẵn qua health@2.0 HAL, bao gồm:

  • Mức dung lượng pin
  • Thời gian sạc đầy pin ngay bây giờ (tính bằng giây)
  • Dung lượng thiết kế sạc đầy pin (tính bằng μAh)

Để biết thông tin về việc triển khai dịch vụ Y tế, hãy xem Thực hiện Y tế .