Tình trạng hệ thống Android

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

  • Xoá các API liên quan đến bộ sạc không dùng đến
  • Xoá StorageAttribute không dùng đến và các trường liên quan
  • Hỗ trợ sạc qua đế sạc.

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ó các ưu điểm sau:

  • Phân tách rõ ràng hơn giữa khung và mã của nhà cung cấp.
  • Mức độ tự do cao hơn để nhà cung cấp tuỳ chỉnh trong báo cáo thông tin y tế.
  • Thông tin khác về tình trạng thiết bị ngoài pin.

Tài liệu về cách triển khai HAL Health 2.1 có trên trang này để tham khảo.

Yêu cầu

Phần này chứa các yêu cầu đối với Android 11, 12 và 13 trở lên.

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

Các thiết bị chạy Android 11 và 12 phải cung cấp HAL 2.1 hoặc HAL AIDL. Các thiết bị không chạy Android 11 hoặc 12 nhưng dự định cập nhật hình ảnh nhà cung cấp lên Matrice tương thích khung mục tiêu phiên bản 5 (phát hành trong Android 11) hoặc 6 (phát hành trong Android 12) phải xoá các phương thức triển khai HAL 2.0 hiện có và cung cấp HAL 2.1 hoặc HAL AIDL. Bạn cũng nên cung cấp HAL 2.1 hoặc AIDL cho 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.

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

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

Các thiết bị chạy Android 13 phải cung cấp AIDL HAL (và không được cung cấp HIDL HAL). Những thiết bị không ra mắt bằng Android 13 nhưng dự định cập nhật hình ảnh của nhà cung cấp lên Matrice tương thích với khung mục tiêu phiên bản 7 (phát hành trong Android 13) phải xoá các phương thức triển khai HAL HIDL hiện có và cung cấp HAL AIDL. Bạn cũng nên cung cấp AIDL HAL cho 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 của nhà cung cấp.

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ừ các HAL HIDL cũ.

Thuật ngữ

Sau đây là các thuật ngữ bạn nên biết trước khi đọc phần còn lại của tài liệu về tình trạng hệ thống Android:

health@2.1
Từ viết tắt của android.hardware.health@2.1. Phiên bản 1 của HIDL sức khoẻ đã được phát hành trong Android 11.
HAL AIDL sức khoẻ
Từ viết tắt của android.hardware.health. Phiên bản 1 của HAL AIDL sức khoẻ được phát hành trong Android 13.
charger (bộ sạc)
Tệp thực thi chạy ở chế độ sạc tắt màn hình hiển thị ảnh động sạc điện thoại.
hồi phục
Tệp thực thi chạy ở chế độ khôi phục phải truy xuất thông tin pin.
đã lưu trữ
Trình nền truy xuất thông tin bộ nhớ và cung cấp thông tin đó cho khung.

Health trong Android 11 và 12

Trong Android 11 và 12, thành phần sức khoẻ hoạt động như được mô tả 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)      ] |
+-------------------------------------+

Đố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)      ] |
+-------------------------------------+

Hãy xem sơ đồ đơn giản sau đây về các chế độ:

Cơ sở hạ tầng Health HIDL HAL 2.1

Hình 1. Cơ sở hạ tầng Health HIDL HAL 2.1.

Health trong Android 13

Trong Android 13, HAL AIDL sức khoẻ được giới thiệu. Hình 2 trình bày chi tiết cách hoạt động của thành phần trạng thái:

Cơ sở hạ tầng HAL AIDL về sức khoẻ

Hình 2. Cơ sở hạ tầng HAL AIDL về sức khoẻ.

Giao diện HIDL HAL 2.1

HAL health@2.1 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: nâng cấp phiên bản nhỏ lên getHealthInfo
  • shouldKeepScreenOn: để xác định xem có nên giữ màn hình ở chế độ sạc hay không

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

Một cấu trúc mới, @2.1::HealthInfo, được trả về bằng cách sử dụng lệnh gọi lại và getHealthInfo_2_1. Cấu trúc này chứa thêm thông tin về tình trạng thiết bị thông qua HAL health@2.0, bao gồm:

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

Hình 3 cho thấy sơ đồ UML của các lớp hữu ích cho việc triển khai HAL sức khoẻ:

Sơ đồ UML HAL của Health 2.1

Hình 3. Sơ đồ UML của Health HAL 2.1.

Để biết thông tin về cách triển khai Dịch vụ sức khoẻ 2.1, hãy xem phần Triển khai Health 2.1.

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

Phần này trình bày thông tin về giao diện AIDL HAL phiên bản 1.

Nội dung thay đổi đối vớ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, API có những thay đổi sau:

  • 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 sạc ở chế độ tắt chỉ tồn tại trên phân vùng /vendor, nên các API trên Giao diện nhà cung cấp là không cần thiết. Để triển khai tính năng sạc ở chế độ tắt đúng cách, hãy xem phần bộ sạc.
  • Loại StorageAttribute và các trường liên quan sẽ bị xoá vì không được sử dụng.
  • Thêm chargerDockOnline vào HealthInfo để hỗ trợ sạc qua đế sạc.

Triển khai

Hình 4 cho thấy sơ đồ UML của các lớp hữu ích cho việc triển khai HAL AIDL sức khoẻ:

Sơ đồ UML HAL AIDL về sức khoẻ

Hình 4. Sơ đồ UML HAL AIDL về sức khoẻ.

Để biết thông tin về cách triển khai dịch vụ AIDL sức khoẻ, hãy xem phần Triển khai HAL AIDL sức khoẻ.

Khôi phục

Android 13 hỗ trợ trình liên kết trong quá trình khôi phục. Việc cài đặt dịch vụ AIDL sức khoẻ vào chế độ khôi phục cho phép dịch vụ này chạy ở chế độ khôi phục.

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

Bộ sạc

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

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

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