Khi phát triển và phát hành thiết bị mới, nhà cung cấp có thể xác định và khai báo phiên bản FCM mục tiêu trong tệp kê khai thiết bị (DM). Khi nâng cấp hình ảnh nhà cung cấp cho các thiết bị cũ, nhà cung cấp có thể chọn triển khai các phiên bản HAL mới và tăng phiên bản FCM mục tiêu.
Phát triển thiết bị mới
Khi xác định phiên bản FCM đích của thiết bị cho các thiết bị mới:
- Để
DEVICE_MANIFEST_FILEvàPRODUCT_ENFORCE_VINTF_MANIFESTkhông xác định. - Triển khai HAL cho phiên bản FCM mục tiêu.
- Viết tệp kê khai thiết bị chính xác.
- Ghi phiên bản FCM đích vào tệp kê khai thiết bị.
- Đặt
DEVICE_MANIFEST_FILE. - Đặt
PRODUCT_ENFORCE_VINTF_MANIFESTthànhtrue.
Phát hành thiết bị mới
Khi một thiết bị mới được phát hành, bạn cần xác định và khai báo phiên bản FCM mục tiêu ban đầu trong tệp kê khai thiết bị dưới dạng thuộc tính "target-level" trong phần tử <manifest> cấp cao nhất.
Ví dụ: các thiết bị chạy Android 9 phải có phiên bản FCM mục tiêu bằng 3 (phiên bản cao hơn hiện có). Cách khai báo điều này trong tệp kê khai thiết bị:
<manifest version="1.0" type="device" target-level="3"> <!-- ... --> </manifest>
Nâng cấp hình ảnh của nhà cung cấp
Khi nâng cấp hình ảnh của nhà cung cấp cho một thiết bị cũ, nhà cung cấp có thể chọn triển khai các phiên bản HAL mới và tăng phiên bản FCM mục tiêu.
Nâng cấp HAL
Trong quá trình nâng cấp hình ảnh của nhà cung cấp, các nhà cung cấp có thể triển khai các phiên bản HAL mới, miễn là tên HAL, tên giao diện và tên phiên bản giống nhau. Ví dụ:
- Các thiết bị Google Pixel 2 và Pixel 2 XL được phát hành với phiên bản FCM mục tiêu 2, đã triển khai HAL âm thanh 2.0 bắt buộc
android.hardware.audio@2.0::IDeviceFactory/default. - Đối với HAL âm thanh 4.0 được phát hành cùng với Android 9, các thiết bị Google Pixel 2 và Pixel 2 XL có thể sử dụng OTA đầy đủ để nâng cấp lên HAL 4.0, triển khai
android.hardware.audio@4.0::IDeviceFactory/default. - Mặc dù
compatibility_matrix.2.xmlchỉ định âm thanh 2.0, nhưng yêu cầu đối với hình ảnh nhà cung cấp có FCM phiên bản 2 mục tiêu đã được nới lỏng vì khung Android 9 (FCM phiên bản 3) coi âm thanh 4.0 là một sự thay thế cho HAL âm thanh 2.0 về chức năng.
Tóm lại, vì compatibility_matrix.2.xml yêu cầu âm thanh 2.0 và compatibility_matrix.3.xml yêu cầu âm thanh 4.0, nên các yêu cầu như sau:
| Phiên bản FCM (hệ thống) | Phiên bản FCM mục tiêu (nhà cung cấp) | Yêu cầu |
|---|---|---|
| 2 (8.1) | 2 (8.1) | Âm thanh 2.0 |
| 3 (9) | 2 (8.1) | Âm thanh 2.0 hoặc 4.0 |
| 3 (9) | 3 (9) | Âm thanh 4.0 |
Nâng cấp phiên bản FCM mục tiêu
Trong quá trình nâng cấp hình ảnh nhà cung cấp, nhà cung cấp cũng có thể tăng phiên bản FCM mục tiêu để chỉ định phiên bản FCM mục tiêu mà hình ảnh nhà cung cấp đã nâng cấp có thể hoạt động. Để tăng phiên bản FCM đích của một thiết bị, nhà cung cấp cần:
- Triển khai tất cả các Phiên bản HAL bắt buộc mới cho phiên bản FCM mục tiêu.
- Sửa đổi các phiên bản HAL trong tệp kê khai thiết bị.
- Sửa đổi phiên bản FCM mục tiêu trong tệp kê khai thiết bị.
- Xoá các phiên bản HAL không dùng nữa.
Ví dụ: Các thiết bị Google Pixel và Pixel XL chạy Android 7.0 nên phiên bản FCM mục tiêu của các thiết bị này phải là phiên bản cũ trở lên. Tuy nhiên, manifest thiết bị khai báo FCM phiên bản 2 mục tiêu vì hình ảnh của nhà cung cấp đã được cập nhật để tuân thủ compatibility_matrix.2.xml:
<manifest version="1.0" type="device" target-level="2">
Nếu nhà cung cấp không triển khai tất cả các phiên bản HAL mới bắt buộc hoặc không xoá các phiên bản HAL không dùng nữa, thì không thể nâng cấp phiên bản FCM mục tiêu.
Ví dụ: Các thiết bị Google Pixel 2 và Pixel 2 XL có FCM phiên bản 2 làm mục tiêu.
Mặc dù các thiết bị này triển khai một số HAL mà compatibility_matrix.3.xml yêu cầu (chẳng hạn như âm thanh 4.0, sức khoẻ 2.0, v.v.), nhưng chúng không xoá android.hardware.radio.deprecated@1.0. HAL này không được dùng ở FCM phiên bản 3 (Android 9). Do đó, những thiết bị này không thể nâng cấp phiên bản FCM mục tiêu lên 3.
Bắt buộc các yêu cầu về nhân trong quá trình cập nhật qua mạng không dây
Cập nhật thiết bị chạy Android 9 trở xuống
Trên các thiết bị chạy Android 9 trở xuống, hãy đảm bảo rằng các CL sau đây được chọn:
Những thay đổi này sẽ giới thiệu cờ bản dựng PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS và để cờ không được đặt cho các thiết bị ra mắt bằng Android 9 trở xuống.
- Khi cập nhật lên Android 10, các ứng dụng OTA trên thiết bị chạy Android 9 trở xuống không kiểm tra đúng các yêu cầu về nhân trong gói OTA. Bạn cần thực hiện những thay đổi này để loại bỏ các yêu cầu về nhân khỏi gói OTA đã tạo.
-
Khi cập nhật lên Android 11, bạn có thể đặt cờ bản dựng
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTSđể kiểm tra khả năng tương thích VINTF khi gói cập nhật được tạo.
Để biết thêm thông tin về cờ bản dựng này, hãy xem bài viết Cập nhật thiết bị từ Android 10.
Cập nhật thiết bị từ Android 10
Android 10 giới thiệu một cờ bản dựng mới, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS. Đối với các thiết bị chạy Android 10, cờ này sẽ tự động được đặt thành true. Khi cờ được đặt thành true, một tập lệnh sẽ trích xuất phiên bản kernel và cấu hình kernel từ hình ảnh kernel đã cài đặt.
- Khi cập nhật lên Android 10, gói cập nhật OTA sẽ chứa phiên bản và cấu hình kernel. Các ứng dụng OTA trên những thiết bị chạy Android 10 sẽ đọc thông tin này để kiểm tra khả năng tương thích.
- Khi cập nhật lên Android 11, quá trình tạo gói OTA sẽ đọc phiên bản kernel và cấu hình để kiểm tra khả năng tương thích.
Nếu tập lệnh không trích xuất được thông tin này cho hình ảnh kernel của bạn, hãy thực hiện một trong các thao tác sau:
- Chỉnh sửa tập lệnh để hỗ trợ định dạng hạt nhân của bạn và đóng góp cho AOSP.
- Đặt
BOARD_KERNEL_VERSIONthành phiên bản kernel vàBOARD_KERNEL_CONFIG_FILEthành đường dẫn của tệp cấu hình kernel đã tạo.config. Bạn phải cập nhật cả hai biến khi cập nhật hình ảnh kernel. - Hoặc đặt
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTSthànhfalseđể bỏ qua việc kiểm tra các yêu cầu về nhân. Bạn không nên làm như vậy vì mọi vấn đề không tương thích đều bị ẩn và chỉ được phát hiện khi chạy các kiểm thử VTS sau khi cập nhật.
Bạn có thể xem mã nguồn của tập lệnh trích xuất thông tin về nhân extract_kernel.py.