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:

  • Phân tách 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ị

Android 13 bao gồm android.hardware.health AIDL HAL, một chuyển đổi từ health@2.1 HAL. HAL mới này có những ưu điểm sau:

  • Xóa các API liên quan đến bộ sạc không sử dụng
  • Xóa StorageAttribute không sử dụng và các trường liên quan
  • Hỗ trợ đế sạc.

Yêu cầu

Thiết bị chạy Android 9 và Android 10

Các thiết bị khởi chạy với Android 9 phải cung cấp 2.x HAL (và không được cung cấp 1.0 HAL) hoặc AIDL 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.x HAL hoặc AIDL 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.0 HAL và quá trình chuyển đổi từ 1.0 HAL cũ.

Thiết bị chạy Android 11 và Android 12

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) hoặc AIDL 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 hoặc AIDL 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 của 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ũ.

Thiết bị chạy Android 13 trở lên

Các thiết bị khởi chạy với Android 13 phải cung cấp AIDL HAL (và không được cung cấp HIDL HAL). Các thiết bị không khởi chạy với Android 13 nhưng có kế hoạch 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 7 (được phát hành trong Android 13) phải xóa các triển khai HIDL HAL hiện có và cung cấp AIDL HAL. Các thiết bị không chạy Android 13 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 AIDL HAL.

Thiết bị không được cung cấp HIDL 1.0 HAL.

AOSP bao gồm nhiều thư viện trợ giúp được thiết kế để giúp bạn triển khai AIDL HAL và quá trình chuyển đổi từ HIDL 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.
  • sức khỏe AIDL HAL : viết tắt của android.hardware.health .
    • Phiên bản 1 được phát hành trên Android 13.
  • 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 ; 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ế độ ký tự và khôi phục ở 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ụ health@2.0 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ữ để 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:

Kết nối 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)      ] |
+-------------------------------------+

Xem sơ đồ đơn giản sau để biết các chế độ khác nhau:

Cơ sở hạ tầng Y tế HAL 2.1

Hình 5. Cơ sở hạ tầng Y tế HAL 2.1

Sức khỏe trong Android 13

Trong Android 13, AIDL HAL lành mạnh được giới thiệu. Thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:

Cơ sở hạ tầng Y tế AIDL HAL

Hình 6. Cơ sở hạ tầng Y tế AIDL HAL

Giao diện HIDL 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 kýCallback, để thay thế IBatteryPropertiesRegistrar.unregisterListener
  • update , để thay thế IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties được thay thế bằng:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Ngoài ra, IHealth cung cấp các API mới sau đây để storaged trữ nhằm truy xuất thông tin liên quan đến bộ nhớ dành riêng cho nhà cung cấp:

  • 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)

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

Giao diện HIDL 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)

Xem sơ đồ UML sau để biết các lớp hữu ích cho việc triển khai HAL sức khỏe:

Biểu đồ Y tế 2.1 HAL UML

Hình 7. Sơ đồ Y tế HAL 2.1 UML

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

Giao diện AIDL HAL phiên bản 1

Thay đổi API

AIDL phiên bản 1 HAL hỗ trợ các API tương tự như HIDL 2.1 HAL. So với giao diện HIDL 2.1, các nội dung sau được thay đổi trong API:

  • Các API liên quan đến bộ sạc được giới thiệu trong HIDL HAL 2.1 không được chuyển sang AIDL HAL. Vì chức năng tính phí ngoài chế độ chỉ tồn tại trên phân vùng /vendor , các API trên Giao diện nhà cung cấp không cần thiết. Để thực hiện sạc ở chế độ tắt đúng cách, hãy xem bộ sạc bên dưới.
  • Loại StorageAttribute và các trường liên quan bị xóa vì chúng không được sử dụng.
  • chargerDockOnline được thêm vào HealthInfo để hỗ trợ sạc qua đế.

Thực hiện

Xem sơ đồ UML sau để biết các lớp hữu ích cho việc triển khai HAL sức khỏe:

Sơ đồ Y tế AIDL HAL UML

Hình 8. Sơ đồ Y tế AIDL HAL UML

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

Sự hồi phục

Android 13 hỗ trợ chất kết dính trong khôi phục. Cài đặt dịch vụ Health AIDL để khôi phục cho phép nó chạy ở chế độ khôi phục.

Để biết thông tin về cách cài đặt dịch vụ AIDL sức khỏe để khôi phục, hãy xem phần sau:

Bộ sạc

Chức năng sạc ngoài chế độ được chuyển từ /system sang /vendor . Đối với các thiết bị chạy Android 13, nếu chúng hỗ trợ sạc ở chế độ tắt, hệ nhị phân dịch vụ HAL phải hỗ trợ chế độ sạc. Để làm như vậy, hãy tham khảo cách triển khai bộ sạc .

Thuộc tính hệ thống sạc

Thuộc tính ro.charger.* Không còn có thể đọc được bởi charger nhị phân trong /vendor . Nếu thiết bị của bạn có bất kỳ thuộc tính hệ thống nào trong số các thuộc tính hệ thống ro.charger.* đặt, hãy tham khảo thuộc tính hệ thống cho bộ sạc .