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

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

  • Xoá các API không dùng đến liên quan đến bộ sạc
  • Xoá StorageAttribute và các trường liên quan không dùng đến
  • Hỗ trợ sạc bằng đế 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ó những ưu điểm sau:

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

Tài liệu về cách triển khai HAL 2.1 cho Health có trên trang này để bạn 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ị ra mắt cùng với Android 11 và 12 phải cung cấp HAL 2.1 hoặc HAL AIDL. Những thiết bị không khởi chạy bằng Android 11 hoặc 12 nhưng có kế hoạch cập nhật hình ảnh nhà cung cấp lên Phiên bản 5 (phát hành trong Android 11) hoặc 6 (phát hành trong Android 12) của Ma trận khả năng tương thích của khung mục tiêu phải xoá các triển khai HAL 2.0 hiện có và cung cấp HAL 2.1 hoặc HAL AIDL. Các thiết bị không khởi chạy bằng Android 11 và không có kế hoạch cập nhật hình ảnh nhà cung cấp cũng nên cung cấp HAL 2.1 hoặc AIDL.

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ị ra mắt cùng với Android 13 phải cung cấp HAL AIDL (và không được cung cấp HAL HIDL). Những thiết bị không ra mắt cùng Android 13 nhưng có kế hoạch cập nhật hình ảnh nhà cung cấp lên Target Framework Compatibility Matrix Version 7 (được phát hành trong Android 13) phải xoá các triển khai HIDL HAL hiện có và cung cấp AIDL HAL. Các thiết bị không khởi chạy bằng Android 13 và không có kế hoạch cập nhật hình ảnh nhà cung cấp cũng nên cung cấp HAL AIDL.

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

Thuật ngữ

Sau đây là những 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 về sức khoẻ được phát hành trong Android 11.
HAL AIDL về sức khoẻ
Từ viết tắt của android.hardware.health. Phiên bản 1 của HAL AIDL về sức khoẻ được phát hành trong Android 13.
charger
Tệp thực thi chạy ở chế độ sạc khi tắt nguồn, hiển thị ảnh động sạc điện thoại.
khôi phục
Tệp thực thi đang chạy ở chế độ khôi phục và phải truy xuất thông tin về pin.
storaged
Dịch vụ hệ thống truy xuất thông tin về bộ nhớ và cung cấp thông tin đó cho khung.

Sức khoẻ trong Android 11 và 12

Trong Android 11 và 12, thành phần sức khoẻ hoạt động như 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 cho các chế độ khác nhau:

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

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

Sức khoẻ trên Android 13

Trong Android 13, HAL AIDL về sức khoẻ được ra mắt. Hình 2 trình bày chi tiết cách hoạt động của thành phần sức khoẻ:

Cơ sở hạ tầng HAL AIDL cho Dịch vụ sức khoẻ

Hình 2. Cơ sở hạ tầng HAL AIDL cho Dịch 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: một bản nâng cấp phiên bản phụ lên getHealthInfo
  • shouldKeepScreenOn: để xác định xem màn hình có nên bật ở chế độ sạc hay không

Ngoài ra, bạn phải triển khai @2.1::IHealth để hỗ trợ @2.1::IHealthInfoCallback cho các hàm registerCallbackunregisterCallback được kế thừa. Giao diện gọi lại mới trả về thông tin về trạng thái cho máy khách bằng cách sử dụng hàm healthInfoChanged_2_1 thay vì hàm healthInfoChanged được 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ông tin bổ sung về tình trạng thiết bị có trong HAL health@2.0, bao gồm:

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

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

Sơ đồ UML HAL 2.1 cho Sức khoẻ

Hình 3. Sơ đồ UML HAL 2.1 cho Dịch vụ sức khoẻ.

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

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

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

Nội dung thay đổi đối với API

HAL AIDL phiên bản 1 hỗ trợ các API tương tự như HAL HIDL 2.1. So với giao diện HIDL 2.1, những nội dung sau đây đã 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 sạc ở chế độ tắt chỉ có trên phân vùng /vendor, nên không cần đến các API trên Giao diện nhà cung cấp. Để triển khai chế độ sạc khi tắt nguồn đúng cách, hãy xem bộ sạc.
  • Loại StorageAttribute và các trường liên quan sẽ bị xoá vì không được dùng.
  • chargerDockOnline được thêm 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 về sức khoẻ:

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

Hình 4. Biểu đồ UML HAL AIDL về sức khoẻ.

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

Khôi phục

Android 13 hỗ trợ liên kết trong quá trình khôi phục. Việc cài đặt dịch vụ Health AIDL để 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 phần 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ị ra mắt cùng với Android 13, nếu hỗ trợ chế độ sạc khi tắt, thì tệp nhị phân dịch vụ HAL phải hỗ trợ chế độ sạc. Để làm như vậ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

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