Bản phát hành khung Android có nhiều Ma trận tương thích khung (FCM), một mã cho mỗi Phiên bản FCM mục tiêu có thể nâng cấp, giúp xác định khung này có thể sử dụng và nhắm mục tiêu các yêu cầu về phiên bản FCM. Trong chương trình FCM Android ngừng sử dụng và xoá các lớp HAL HIDL, sau đó sửa đổi các tệp FCM thành phản ánh trạng thái của phiên bản HAL.
Để hỗ trợ các OTA chỉ hỗ trợ khung trong hệ sinh thái của riêng họ, những đối tác mở rộng giao diện của nhà cung cấp cũng sẽ không còn được sử dụng và xoá các lớp HAL HIDL bằng cách sử dụng cùng .
Thuật ngữ
- Ma trận tương thích khung (FCM)
- Tệp XML chỉ định các yêu cầu về khung đối với nhà cung cấp dịch vụ tuân thủ thực tế. Ma trận tương thích được tạo phiên bản và một phiên bản mới bị cố định đối với mỗi bản phát hành khung. Mỗi bản phát hành khung chứa nhiều FCM.
- Các phiên bản FCM của nền tảng (SF)
- Tập hợp tất cả phiên bản FCM trong một bản phát hành khung. Khung này có thể hoạt động bất kỳ cách triển khai nào của nhà cung cấp đáp ứng một trong các FCM này.
- Phiên bản FCM (F)
- Phiên bản cao nhất trong số tất cả FCM trong một bản phát hành khung.
- Phiên bản FCM mục tiêu (V)
- Phiên bản FCM được nhắm đến (từ SF), được khai báo rõ ràng trong thiết bị mà việc triển khai của nhà cung cấp đáp ứng yêu cầu. Việc triển khai nhà cung cấp phải được tạo dựa trên FCM đã xuất bản, mặc dù có thể khai báo các phiên bản HAL mới hơn trong Tệp kê khai thiết bị.
- Phiên bản HAL
- Phiên bản HAL có định dạng
foo@x.y
, trong đófoo
là tên HAL vàx.y
là phiên bản cụ thể; ví dụ:nfc@1.0
,keymaster@3.0
(tiền tố gốc, ví dụ:android.hardware
, bị bỏ qua trong tài liệu này.) - Tệp kê khai thiết bị
- Tệp XML chỉ định các phiên bản HAL (Lớp trừu tượng phần cứng) cho phía thiết bị trong giao diện của nhà cung cấp, bao gồm hình ảnh nhà cung cấp và ODM mà bạn cung cấp. Nội dung của tệp kê khai thiết bị là bị hạn chế bởi phiên bản FCM mục tiêu của thiết bị nhưng có thể liệt kê các HAL hoàn toàn mới so với FC tương ứng với V.
- Lớp trừu tượng phần cứng (HAL) cho thiết bị
- HAL được nêu (được cung cấp) trong tệp kê khai thiết bị và được liệt kê (bắt buộc hoặc không bắt buộc) trong ma trận tương thích khung (FCM).
- Ma trận về khả năng tương thích với thiết bị (DCM)
- Tệp XML chỉ định các yêu cầu của nhà cung cấp về khung tuân thủ thực tế. Mỗi thiết bị chứa một DCM.
- Tệp kê khai khung
- Tệp XML chỉ định phiên bản HAL nào cho khung của nhà cung cấp giao diện, bao gồm hệ thống, system_ext và hình ảnh sản phẩm, cung cấp. HAL (Lớp trừu tượng phần cứng) trong tệp kê khai khung tự động bị tắt theo FCM mục tiêu của thiết bị .
- Lớp trừu tượng phần cứng (HAL) cho khung
- Các HAL được nêu trong tệp kê khai khung và được liệt kê dưới dạng là bắt buộc hoặc không bắt buộc trong ma trận tương thích thiết bị (DCM).
Vòng đời FCM trong cơ sở mã
Bản tóm tắt của tài liệu này mô tả vòng đời FCM. Để xem
tệp kê khai được hỗ trợ, hãy tham khảo
hardware/interfaces/compatibility_matrix.<FCM>.xml
nơi có thể tìm thấy FCM
system/libvintf/include/vintf/Level.h
.
Thiết bị vận chuyển phiên bản phát hành Android tương ứng dự kiến sẽ có giá trị FCM lớn hơn hoặc bằng cấp tương đương. Ví dụ: một thiết bị vận chuyển với Android 11 thường sẽ có FCM cấp 5, nhưng hãy triển khai FCM cấp 6 trở lên, kèm theo nhiều yêu cầu bổ sung được chỉ định trong ma trận tương thích. Các cấp độ được hỗ trợ là:
FCM | Phiên bản Android |
---|---|
4 | Android 10/Q |
5 | Android 11/R |
6 | Android 12/S |
7 | Android 13/T |
8 | Android 14/U |
202404 | Android 15/V |
Khi Android không còn dùng cấp độ FCM nữa, cấp độ này vẫn được hỗ trợ trên các thiết bị hiện có.
Phát triển trong phiên bản FCM mới
Android tăng số phiên bản FCM cho từng bản phát hành khung (chẳng hạn như Android
8 và 8.1). Trong quá trình phát triển, compatibility_matrix.F.xml
mới là
được tạo và compatibility_matrix.f.xml
hiện có (trong đó f
< F
) là không
thay đổi lâu hơn.
Cách bắt đầu phát triển trong phiên bản FCM mới F
:
- Sao chép
compatibility_matrix.<F-1>.xml
mới nhất vàocompatibility_matrix.F.xml
. - Cập nhật thuộc tính
level
trong tệp thànhF
. - Thêm các quy tắc xây dựng tương ứng để cài đặt ma trận tương thích này vào thiết bị.
Giới thiệu HAL mới
Trong quá trình phát triển, khi giới thiệu HAL (Wi-Fi, NFC, v.v.) mới cho Android
trên phiên bản FCM hiện tại F
, hãy thêm HAL vào compatibility_matrix.F.xml
bằng
các chế độ cài đặt optional
sau:
optional="false"
nếu các thiết bị đi kèm vớiV = F
phải chạy bằng lớp trừu tượng phần cứng (HAL) này,optional="true"
nếu các thiết bị đi kèm vớiV = F
có thể chạy mà không cần lớp HAL này.
Ví dụ: Android 8.1 giới thiệu cas@1.0
dưới dạng một lớp trừu tượng phần cứng (HAL) không bắt buộc. Thiết bị
khởi chạy với Android 8.1 là không bắt buộc phải triển khai HAL này, vì vậy
mục nhập sau đã được thêm vào compatibility_matrix.F.xml
(trước đây là
có tên compatibility_matrix.current.xml
tạm thời trong quá trình phát triển ứng dụng đó
phát hành):
<hal format="hidl" optional="true">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
Nâng cấp HAL (cơ chế nhỏ)
Trong quá trình phát triển, khi HAL có phiên bản nhỏ được nâng cấp từ x.z
lên
x.(z+1)
ở Phiên bản FCM hiện tại F
, nếu phiên bản đó là:
- Bắt buộc trên các thiết bị chạy
V = F
,compatibility_matrix.F.xml
phải nêu rõx.(z+1)
vàoptional="false"
. - Không bắt buộc trên các thiết bị chạy bằng
V = F
,compatibility_matrix.F.xml
phải sao chépx.y-z
và tính không bắt buộc từcompatibility_matrix.<F-1>.xml
rồi thay đổi phiên bản thànhx.w-(z+1)
(trong đów >= y
).
Ví dụ: Android 8.1 ra mắt broadcastradio@1.1
làm phiên bản phụ
nâng cấp 1.0 HAL. Phiên bản cũ hơn, broadcastradio@1.0
, là không bắt buộc đối với
thiết bị chạy Android 8.0 trong khi phiên bản mới hơn,
broadcastradio@1.1
là không bắt buộc đối với các thiết bị chạy Android 8.1. Ngang bằng
compatibility_matrix.1.xml
:
<hal format="hidl" optional="true">
<name>android.hardware.broadcastradio</name>
<version>1.0</version>
<interface>
<name>IBroadcastRadioFactory</name>
<instance>default</instance>
</interface>
</hal>
Mục nhập này đã được sao chép vào compatibility_matrix.F.xml
và được sửa đổi như sau:
<hal format="hidl" optional="true">
<name>android.hardware.broadcastradio</name>
<version>1.0-1</version>
<interface>
<name>IBroadcastRadioFactory</name>
<instance>default</instance>
</interface>
</hal>
Nâng cấp HAL (chính)
Trong quá trình phát triển, khi HAL có phiên bản nâng cấp lớn tại FCM hiện tại
Phiên bản F
, phiên bản lớn mới x.0
được thêm vào
compatibility_matrix.F.xml
với các chế độ cài đặt optional
sau:
optional="false"
chỉ có phiên bảnx.0
, nếu thiết bị đi kèmV = F
phải chạy bằngx.0
.optional="false"
nhưng cùng với các phiên bản lớn cũ trong cùng một<hal>
, nếu các thiết bị đi kèm vớiV = F
phải chạy bằng HAL này nhưng có thể chạy bằng một phiên bản lớn cũ.optional="true"
nếu các thiết bị đi kèm vớiV = F
không phải ra mắt HAL.
Ví dụ: Android 9 giới thiệu health@2.0
dưới dạng một
phiên bản lớn của HAL 1.0 và ngừng sử dụng HAL 1.0. Càng lớn
health@1.0
là không bắt buộc đối với thiết bị chạy Android 8.0 và
Android 8.1. Các thiết bị chạy Android 9 phải
hãy cung cấp phiên bản 2.0 mới. Ví dụ: giả sử
compatibility_matrix.legacy.xml
!
compatibility_matrix.1.xml
và
compatibility_matrix.2.xml
chứa mục nhập này:
<hal format="hidl" optional="true">
<name>android.hardware.health</name>
<version>1.0</version>;
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
Sao chép mục nhập này vào compatibility_matrix.F.xml
và sửa đổi thành
sau:
<hal format="hidl" optional="false">
<name>android.hardware.health</name>
<version>2.0</version>
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
Giới hạn:
- Vì HAL 2.0 nằm trong
compatibility_matrix.3.xml
cóoptional="false"
, các thiết bị chạy Android 9 phải gửi kèm với HAL 2.0.` - Vì HAL 1.0 không có trong
compatibility_matrix.3.xml
, thiết bị chạy Android 9 không được cung cấp HAL 1.0 (vì HAL này được coi là không dùng nữa). - Vì HAL 1.0 có trong
legacy/1/2.xml
(các phiên bản FCM cũ hơn Android 9 có thể hoạt động) dưới dạng HAL (Lớp trừu tượng phần cứng) tuỳ chọn, Khung Android 9 vẫn có thể hoạt động với HAL 1.0 (không được coi là Phiên bản HAL đã bị gỡ bỏ).
Phiên bản FCM mới
Quy trình phát hành Phiên bản FCM trên phân vùng hệ thống chỉ được thực hiện của Google như một phần của bản phát hành AOSP và bao gồm các bước sau:
- Đảm bảo
compatibility_matrix.F.xml
có thuộc tínhlevel="F"
. - Đảm bảo tất cả thiết bị đều được tạo và khởi động.
- Cập nhật bài kiểm tra VTS
để đảm bảo thiết bị chạy bằng khung mới nhất (dựa trên
ở cấp độ API Vận chuyển) có Phiên bản FCM mục tiêu
V >= F
. - Xuất bản tệp lên AOSP.
Ví dụ: thử nghiệm VTS đảm bảo rằng các thiết bị chạy Android 9 có Phiên bản FCM mục tiêu>= 3.
Ngoài ra, FCM sản phẩm và system_ext cũng có thể liệt kê các yêu cầu cho mỗi các phiên bản FCM nền tảng. Phát hành các phiên bản FCM trên sản phẩm và system_ext phân vùng do chủ sở hữu của các hình ảnh này thực hiện, tương ứng. Phiên bản FCM các số trên phân vùng product và phân vùng system_ext phải khớp với số trên phân vùng phân vùng hệ thống. Tương tự như các phiên bản FCM trên phân vùng hệ thống, ma trận tương thích tại FCM phiên bản F trong phân vùng product và system_ext phản ánh các yêu cầu trên thiết bị sử dụng FCM mục tiêu phiên bản F.
Ngừng sử dụng phiên bản HAL
Việc ngừng sử dụng phiên bản HAL là quyết định của nhà phát triển (ví dụ: đối với AOSP HAL, Google đưa ra quyết định). Điều này có thể xảy ra khi phiên bản HAL cao hơn (dù là phiên bản nhỏ hay lớn) được phát hành.
Ngừng sử dụng lớp trừu tượng phần cứng (HAL) của thiết bị
Khi HAL foo@x.y
cho một thiết bị cụ thể không được dùng nữa tại phiên bản FCM F
, điều đó có nghĩa là
mọi thiết bị phát hành với Phiên bản FCM mục tiêu V = F
trở lên đều không được
triển khai foo
ở phiên bản x.y
hoặc bất kỳ phiên bản nào cũ hơn x.y
. Không dùng nữa
Phiên bản HAL vẫn được khung hỗ trợ để nâng cấp thiết bị.
Khi phiên bản FCM F
được phát hành, phiên bản HAL foo@x.y
sẽ được xem xét
không được dùng nữa nếu Phiên bản HAL cụ thể không được nêu rõ trong phiên bản mới nhất
FCM cho phiên bản FCM mục tiêu V = F
. Đối với thiết bị chạy bằng V = F
, một trong
các điều kiện sau là đúng:
- Khung này yêu cầu một phiên bản cao hơn (chính hoặc phụ);
- Khung này không yêu cầu HAL nữa.
Ví dụ: trong Android 9, health@2.0
được giới thiệu
là một bản nâng cấp phiên bản lớn của 1.0 HAL. health@1.0
đã bị xoá khỏi
compatibility_matrix.3.xml
nhưng có ở
compatibility_matrix.legacy.xml
!
compatibility_matrix.1.xml
thân mến!
và khả năng tương thích_matrix.2.xml.
Do đó, health@1.0
được coi là không dùng nữa.
Ngừng sử dụng HAL khung
Khi một khung HAL foo@x.y
nhất định không được dùng nữa tại phiên bản FCM F
, điều đó có nghĩa là
mọi thiết bị phát hành với Phiên bản FCM mục tiêu V = F
trở lên đều không được
mong muốn khung này cung cấp foo
ở phiên bản x.y
hoặc tại bất kỳ phiên bản nào cũ hơn
hơn x.y
. Phiên bản HAL không dùng nữa vẫn được khung cung cấp cho
nâng cấp thiết bị.
Khi phiên bản FCM F
được phát hành, phiên bản HAL foo@x.y
sẽ được xem xét
không dùng nữa nếu tệp kê khai khung chỉ định
max-level="F - 1"
với giá foo@x.y
. Đối với các thiết bị đang chạy
với V = F
, khung này không cung cấp HAL foo@x.y
. Thiết bị
Ma trận tương thích trên các thiết bị chạy bằng V = F
không được liệt kê khung
HAL bằng max-level < V
.
Ví dụ: trong Android 12, schedulerservice@1.0
là
không dùng nữa. Thuộc tính max-level
được thiết lập thành 5
, phiên bản FCM ra mắt
trong Android 11. Xem
Khung Android 12
tệp kê khai.
Ngừng hỗ trợ các phiên bản FCM mục tiêu
Khi thiết bị đang hoạt động của một Phiên bản FCM mục tiêu V
giảm xuống dưới mức nhất định
ngưỡng Phiên bản FCM mục tiêu sẽ bị xoá khỏi SF đã đặt của
bản phát hành khung tiếp theo. Bạn có thể thực hiện việc này bằng cả hai bước sau:
Xoá
compatibility_matrix.V.xml
khỏi quy tắc bản dựng (để nó không bị như vậy cài đặt trên hình ảnh hệ thống) và xoá mọi mã đã triển khai hoặc phụ thuộc vào những khả năng bị loại bỏ.Xoá các HAL khung có
max-level
thấp hơn hoặc bằngV
khỏi tệp kê khai khung và xoá mọi mã triển khai phần tử đã loại bỏ HAL khung.
Thiết bị có Phiên bản FCM mục tiêu bên ngoài SF cho một khung nhất định bản phát hành không thể nâng cấp lên bản phát hành đó.
Trạng thái phiên bản HAL
Các phần sau đây mô tả (theo trình tự thời gian) các trạng thái có thể có về Phiên bản HAL.
Chưa phát hành
Đối với HAL (Lớp trừu tượng phần cứng) của thiết bị, nếu Phiên bản HAL không ở chế độ công khai và bị treo
ma trận tương thích, tính năng này được coi là chưa phát hành và có thể đang trong quá trình phát triển.
Bao gồm cả các Phiên bản HAL chỉ có trong compatibility_matrix.F.xml
.
Ví dụ:
- Trong quá trình phát triển Android 9,
HAL
health@2.0
được coi là một HAL (Lớp trừu tượng phần cứng) chưa phát hành và chỉ có trongcompatibility_matrix.3.xml
. - HAL
teleportation@1.0
không có trong bất kỳ ma trận tương thích nào đã phát hành, và cũng được coi là HAL (Lớp trừu tượng phần cứng) chưa phát hành.
Đối với HAL khung, nếu phiên bản HAL chỉ có trong tệp kê khai khung của một nhánh phát triển không liên quan thì sẽ được coi là chưa phát hành.
Đã phát hành và hiện tại
Đối với HAL (Lớp trừu tượng phần cứng) của thiết bị, nếu phiên bản HAL (Lớp trừu tượng phần cứng) có khả năng tương thích công khai và bị treo
ma trận màu thì nó được giải phóng. Ví dụ: sau khi FCM Phiên bản 3 bị treo và xuất bản
đối với AOSP, HAL health@2.0
được coi là phiên bản HAL đã phát hành và hiện tại.
Nếu phiên bản HAL nằm trong ma trận tương thích công khai và cố định có
Phiên bản FCM cao nhất, phiên bản HAL là phiên bản hiện tại (tức là không bị ngừng sử dụng). Cho
Ví dụ: các phiên bản HAL hiện có (chẳng hạn như nfc@1.0
được giới thiệu trong
compatibility_matrix.legacy.xml
)
tiếp tục tồn tại ở compatibility_matrix.3.xml
cũng được coi là
các phiên bản HAL (Lớp trừu tượng phần cứng) hiện tại.
Đối với HAL khung, nếu phiên bản HAL có trong tệp kê khai khung
của nhánh được phát hành mới nhất không có thuộc tính max-level
hoặc (bất thường)
max-level
bằng hoặc cao hơn phiên bản FCM được phát hành trong nhánh này,
được coi là phiên bản HAL đã phát hành và hiện tại. Ví dụ:
Lớp trừu tượng phần cứng (HAL) displayservice
đã được phát hành và có trong Android
12, như được chỉ định bởi
Khung Android 12
tệp kê khai.
Đã phát hành nhưng không dùng nữa
Đối với HAL thiết bị, Phiên bản HAL không được dùng nữa khi và chỉ khi tất cả các điều kiện sau được đáp ứng:
- Phát hành.
- Không nằm trong ma trận tương thích công khai và cố định có giá trị cao nhất Phiên bản FCM.
- Nằm trong ma trận tương thích công khai và cố định mà khung này vẫn Google Cloud.
Ví dụ:
- HAL
health@1.0
đã sẵn sàngcompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
! vàcompatibility_matrix.2.xml
, nhưng không ở trongcompatibility_matrix.3.xml
. Do đó, tính năng này được coi là không dùng nữa trong Android 9. - HAL nguồn có một bản nâng cấp nhỏ trong Android
9, nhưng
power@1.0
vẫn còn trongcompatibility_matrix.3.xml
. power@1.0
compatibility_matrix.legacy.xml
!compatibility_matrix.1.xml
! vàcompatibility_matrix.2.xml
.compatibility_matrix.3.xml
cópower@1.0-1
.
Do đó, power@1.0
là hiện tại, nhưng KHÔNG không dùng nữa trong Android
9.
Đối với HAL khung, nếu phiên bản HAL có trong tệp kê khai khung của phiên bản mới nhất
nhánh được phát hành có thuộc tính max-level
thấp hơn bản phát hành phiên bản FCM
trong nhánh này, đây được coi là phiên bản HAL đã phát hành nhưng không được dùng nữa. Cho
Ví dụ: HAL schedulerservice
được phát hành nhưng không dùng nữa trong
Android 12, như được chỉ định trong
Tệp kê khai khung Android 12.
Đã xoá
Đối với HAL (Lớp trừu tượng phần cứng) của thiết bị, Phiên bản HAL (Lớp trừu tượng phần cứng) sẽ bị gỡ bỏ khi và chỉ khi là đúng:
- Bản phát hành này đã được phát hành trước đó.
- Không nằm trong bất kỳ ma trận tương thích công khai và cố định nào mà khung này Google Cloud.
Ma trận tương thích là công khai, bị treo, nhưng không được hỗ trợ bởi khung được lưu giữ trong cơ sở mã để xác định Phiên bản HAL đã bị loại bỏ có thể viết bài kiểm tra VTS để đảm bảo HAL đã được loại bỏ không có trên thiết bị mới.
Đối với HAL khung, phiên bản HAL sẽ bị xoá khi và chỉ khi: đáp ứng:
- Bản phát hành này đã được phát hành trước đó.
- Tệp này không nằm trong bất kỳ tệp kê khai khung nào của nhánh được phát hành mới nhất.
FCM cũ
Phiên bản FCM mục tiêu cũ là giá trị đặc biệt dành cho tất cả các thiết bị không hỗ trợ chuẩn Treble. Chiến lược phát hành đĩa đơn
FCM cũ, compatibility_matrix.legacy.xml
, liệt kê các yêu cầu
của khung này trên các thiết bị cũ (tức là các thiết bị ra mắt trước Android 8.0).
Nếu tệp này tồn tại cho FCM phiên bản F
, thì mọi thiết bị không phải định dạng Treble đều có thể
đã nâng cấp lên F
miễn là tệp kê khai thiết bị tương thích với tệp này.
Việc xoá nội dung được thực hiện theo quy trình tương tự như FCM đối với các phiên bản FCM mục tiêu khác
(sẽ bị xoá sau khi số lượng thiết bị đang hoạt động trước phiên bản 8.0 giảm xuống dưới mức
ngưỡng).
Các phiên bản FCM đã phát hành
Bạn có thể xem danh sách các phiên bản FCM đã phát hành trong
hardware/interfaces/compatibility_matrices
.
Để tìm phiên bản FCM được phát hành cùng với một bản phát hành Android cụ thể, hãy xem
Level.h
.