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:
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ẻ:
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àygetHealthInfo_2_1
: một bản nâng cấp phiên bản phụ lêngetHealthInfo
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 registerCallback
và unregisterCallback
đượ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ẻ:
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àoHealthInfo
để 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ẻ:
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.