Bản phát hành Android 8.0 sẽ di chuyển việc xử lý các lệnh USB ra khỏi tập lệnh init
và vào trình nền USB gốc để có cấu hình và độ tin cậy của mã tốt hơn. Đối với cấu hình hàm Tiện ích, tập lệnh init
(trình kích hoạt thuộc tính) được dùng để thực hiện các thao tác tiện ích dành riêng cho thiết bị.
Trong các bản phát hành trước, các cấu hình dành riêng cho thiết bị này được đạt được thông qua các tập lệnh init
dành riêng cho thiết bị (sử dụng điều kiện kích hoạt thuộc tính). Việc chuyển sang thiết kế Lớp trừu tượng phần cứng (HAL) sẽ giúp quá trình triển khai trở nên rõ ràng hơn và giải quyết được những vấn đề sau:
- Các thao tác như ghi vào nút sysfs của hạt nhân có thể không thành công nhưng không được truyền trở lại mã khung đặt trình kích hoạt thuộc tính. Do đó, các khung giả định không chính xác rằng các thao tác đã thành công mặc dù các thao tác đó đã âm thầm không thành công.
- Tập lệnh
init
có số lượng thao tác có thể thực thi bị giới hạn.
Bản phát hành Android 12 bổ sung tính năng hỗ trợ HAL của tiện ích USB cho Mô hình điều khiển mạng (NCM) và các lệnh gọi API trả về cả số phiên bản HAL và tốc độ USB. Để biết thêm thông tin về các lệnh gọi API có sẵn thông qua USB HAL, hãy xem tóm tắt gói android.hardware.usb
.
HAL và Treble
Các tập lệnh init
dành riêng cho thiết bị được dùng để thay thế các lớp HAL nhằm thực hiện các thao tác USB dành riêng cho thiết bị. USB (thông qua ADB) là giao diện chính để gỡ lỗi các sự cố hệ thống. Việc có một trình nền gốc để thực hiện cấu hình USB sẽ loại bỏ phần phụ thuộc trên mã khung, vì vậy, ngay cả khi khung gặp sự cố, USB vẫn sẽ chạy.
Trong mô hình Treble cũng được giới thiệu trong Android 8.0, tất cả HAL đều được tách biệt với các dịch vụ hệ thống và bắt buộc phải chạy trong trình nền gốc của riêng chúng. Điều này giúp loại bỏ yêu cầu phải có trình nền USB độc quyền vì lớp HAL đóng vai trò kép là trình nền USB.
Cách triển khai HAL mặc định sẽ xử lý tất cả thiết bị chạy trước Android 8.0. Do đó, sẽ không có tác vụ nào dành riêng cho thiết bị đối với các thiết bị chạy Android phiên bản trước 8.0. Android 8.0 sử dụng giao diện HAL để truy vấn trạng thái của cổng USB và để thực hiện hoán đổi vai trò dữ liệu và vai trò nguồn.
Triển khai
Bạn cần triển khai giao diện USB HAL mới trên mọi thiết bị chạy Android 8.0.
Phương thức triển khai mặc định sẽ xử lý các thiết bị chạy Android phiên bản trước 8.0. Chỉ cần triển khai mặc định là đủ nếu thiết bị sử dụng lớp dual_role_usb
để báo cáo trạng thái cổng loại c. Bạn có thể phải thực hiện một số thay đổi nhỏ trong tập lệnh USB dành riêng cho thiết bị để chuyển quyền sở hữu các nút typc-c sang hệ thống.