Bản phát hành khung Android có nhiều Ma trận tương thích khung (FCM), một Ma trận cho mỗi Phiên bản FCM mục tiêu có thể nâng cấp, xác định những gì khung có thể sử dụng và các yêu cầu về phiên bản FCM mục tiêu. Là một phần của vòng đời FCM, Android không dùng nữa và xóa HIDL HAL, sau đó sửa đổi các tệp FCM để phản ánh trạng thái của phiên bản HAL .
Để kích hoạt các OTA chỉ có khung trong hệ sinh thái của riêng họ, các đối tác mở rộng giao diện của nhà cung cấp cũng nên ngừng sử dụng và xóa HIDL HAL bằng các phương pháp tương tự.
Thuật ngữ
- Ma trận tương thích khung (FCM)
- Một tệp XML chỉ định các yêu cầu khung về việc triển khai tuân thủ của nhà cung cấp. Ma trận tương thích được tạo phiên bản và phiên bản mới được cố định cho mỗi bản phát hành khung. Mỗi bản phát hành khung chứa nhiều FCM.
- Phiên bản FCM nền tảng (S F )
- Tập hợp tất cả các phiên bản FCM trong một bản phát hành khung. Khung này có thể hoạt động với bất kỳ 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ả các FCM trong 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 mục tiêu (từ S F ), được khai báo rõ ràng trong bảng kê khai thiết bị, mà việc triển khai của nhà cung cấp đáp ứng. Việc triển khai của nhà cung cấp phải được tạo dựa trên FCM đã xuất bản, mặc dù nó có thể khai báo các phiên bản HAL mới hơn trong Bản kê khai thiết bị của nó.
- Phiên bản HAL
- Phiên bản HAL có định dạng
foo@xy
, trong đófoo
là tên HAL vàxy
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.) - Bản kê khai thiết bị
- Các tệp XML chỉ định phiên bản HAL nào mà phía thiết bị của giao diện nhà cung cấp, bao gồm cả hình ảnh nhà cung cấp và ODM, cung cấp. Nội dung của bản kê khai thiết bị bị ràng buộc bởi phiên bản Target FCM của thiết bị nhưng có thể liệt kê các HAL hoàn toàn mới hơn so với FC tương ứng với V.
- HAL thiết bị
- HAL được liệt kê (được cung cấp) trong bảng kê khai thiết bị và được liệt kê (bắt buộc hoặc tùy chọn) trong ma trận tương thích khung (FCM).
- Ma trận tương thích thiết bị (DCM)
- Tệp XML chỉ định các yêu cầu của nhà cung cấp về việc triển khai khung tuân thủ. Mỗi thiết bị chứa một DCM.
- Bản kê khai khung
- Tệp XML chỉ định phiên bản HAL nào mà phía khung của giao diện nhà cung cấp, bao gồm hệ thống, system_ext và hình ảnh sản phẩm, cung cấp. HAL trong tệp kê khai khung bị vô hiệu hóa động theo phiên bản Target FCM của thiết bị.
- HAL khung
- HAL được liệt kê như được cung cấp trong bảng kê khai khung và được liệt kê là bắt buộc hoặc tùy chọn trong ma trận tương thích thiết bị (DCM).
Vòng đời FCM trong Codebase
Tài liệu này mô tả vòng đời FCM một cách tóm tắt. Để xem các tệp kê khai hiện được hỗ trợ, hãy tham khảo hardware/interfaces/compatibility_matrix.<FCM>.xml
trong đó có thể tìm thấy FCM trong system/libvintf/include/vintf/Level.h
.
Kể từ Android 14, 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 |
số 8 | Android 14/U |
Phát triển phiên bản FCM mới
Android tăng phiên bản FCM cho mỗi bản phát hành khung (chẳng hạn như Android 8, 8.1, v.v.). Trong quá trình phát triển, compatibility_matrix.F.xml
mới được tạo và compatibility_matrix.f.xml
hiện có (trong đó f
< F
) không còn bị thay đổi.
Để bắt đầu phát triển trong Phiên bản FCM F
mới:
- Sao chép lại
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 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 mới (Wi-Fi, NFC, v.v.) cho Android trên phiên bản FCM F
hiện tại, hãy thêm HAL vào compatibility_matrix.F.xml
với các cài đặt optional
sau:
-
optional="false"
nếu các thiết bị đi kèmV = F
phải khởi chạy với HAL này, -
optional="true"
nếu các thiết bị đi kèmV = F
có thể khởi chạy mà không cần HAL này.
Ví dụ: Android 8.1 đã giới thiệu cas@1.0
dưới dạng HAL tùy chọn. Các thiết bị chạy Android 8.1 không bắt buộc phải triển khai HAL này, vì vậy mục sau đã được thêm vào compatibility_matrix.F.xml
(trước đây được đặt tên tạm thời là compatibility_matrix.current.xml
trong quá trình phát triển bản 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 (nhỏ)
Trong quá trình phát triển, khi HAL có phiên bản nâng cấp nhỏ từ xz
lên x.(z+1)
ở Phiên bản FCM F
hiện tại, nếu phiên bản đó là:
- Bắt buộc trên các thiết bị khởi chạy với
V = F
,compatibility_matrix.F.xml
phải nêux.(z+1)
vàoptional="false"
. - Không bắt buộc trên các thiết bị khởi chạy với
V = F
,compatibility_matrix.F.xml
phải sao chépxy-z
và tùy chọn từcompatibility_matrix.<F-1>.xml
và thay đổi phiên bản thànhxw-(z+1)
(trong đów >= y
).
Ví dụ: Android 8.1 đã giới thiệu broadcastradio@1.1
dưới dạng bản nâng cấp phiên bản nhỏ của 1.0 HAL. Phiên bản cũ hơn, broadcastradio@1.0
, là tùy chọn cho các thiết bị khởi chạy Android 8.0 trong khi phiên bản mới hơn, broadcastradio@1.1
, là tùy chọn cho các thiết bị khởi chạy Android 8.1. Trong 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ó bản nâng cấp phiên bản chính ở FCM Phiên bản F
hiện tại, phiên bản chính mới x.0
sẽ được thêm vào compatibility_matrix.F.xml
với các cài đặt optional
sau:
-
optional="false"
chỉ với phiên bảnx.0
, nếu các thiết bị đi kèm vớiV = F
phải khởi chạy vớix.0
. -
optional="false"
nhưng cùng với các phiên bản chính cũ hơn trong cùng một thẻ<hal>
, nếu các thiết bị đi kèmV = F
phải khởi chạy bằng HAL này, nhưng có thể khởi chạy với phiên bản chính cũ hơn. -
optional="true"
nếu các thiết bị đi kèmV = F
không phải khởi chạy HAL.
Ví dụ: Android 9 giới thiệu health@2.0
dưới dạng bản nâng cấp phiên bản chính của 1.0 HAL và không dùng HAL 1.0 nữa. Phiên bản cũ hơn, health@1.0
, là tùy chọn cho các thiết bị chạy Android 8.0 và Android 8.1. Các thiết bị chạy Android 9 không được cung cấp HAL 1.0 không được dùng nữa mà thay vào đó phải cung cấp phiên bản 2.0 mới. Tôi compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
và compatibility_matrix.2.xml
:
<hal format="hidl" optional="true">
<name>android.hardware.health</name>
<version>1.0</version>;
<interface>
<name>IHealth</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="false">
<name>android.hardware.health</name>
<version>2.0</version>
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
Những hạn chế:
- Vì HAL 2.0 nằm trong
compatibility_matrix.3.xml
vớioptional="false"
nên các thiết bị chạy Android 9 phải đi kèm với 2.0 HAL.` - Vì HAL 1.0 không có trong
compatibility_matrix.3.xml
nên các 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 (Phiên bản FCM cũ hơn mà Android 9 có thể hoạt động) dưới dạng HAL tùy chọn nê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ị loại bỏ ).
Phiên bản FCM mới
Quá trình phát hành Phiên bản FCM trên phân vùng hệ thống chỉ được Google thực hiện 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ả các thiết bị được xây dựng và khởi động.
- Cập nhật các thử nghiệm VTS để đảm bảo các thiết bị khởi chạy với 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 tin lên AOSP.
Ví dụ: kiểm tra 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 của sản phẩm và system_ext cũng có thể liệt kê các yêu cầu đối với từng phiên bản FCM của nền tảng. Việc phát hành phiên bản FCM trên phân vùng sản phẩm và phân vùng system_ext lần lượt do chủ sở hữu của những hình ảnh này thực hiện. Số phiên bản FCM trên phân vùng sản phẩm và system_ext phải khớp với số phiên bản trên 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 phiên bản FCM F trong phân vùng sản phẩm và system_ext phản ánh các yêu cầu trên thiết bị có phiên bản FCM mục tiêu F.
Phiên bản HAL không được dùng nữa
Việc ngừng sử dụng Phiên bản HAL là quyết định của nhà phát triển (tức là đối với AOSP HAL, Google sẽ đưa ra quyết định). Nó có thể xảy ra khi một phiên bản HAL cao hơn (dù là nhỏ hay lớn) được phát hành.
Không dùng thiết bị HAL
Khi một thiết bị nhất định HAL foo@xy
không được dùng nữa ở FCM Phiên bản F
, điều đó có nghĩa là mọi thiết bị khởi chạy với Phiên bản FCM mục tiêu V = F
trở lên không được triển khai foo
ở phiên bản xy
hoặc bất kỳ phiên bản nào cũ hơn xy
. Phiên bản HAL không được dùng nữa vẫn được khung nâng cấp thiết bị hỗ trợ.
Khi Phiên bản FCM F
được phát hành, Phiên bản HAL foo@xy
được coi là không được dùng nữa nếu Phiên bản HAL cụ thể không được nêu rõ ràng trong FCM mới nhất cho Phiên bản FCM mục tiêu V = F
Đối với các thiết bị khởi chạy với V = F
, một trong các điều kiện sau là đúng:
- Khung yêu cầu 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à phiên bản nâng cấp chính của 1.0 HAL. health@1.0
bị xóa khỏi compatibility_matrix.3.xml
nhưng hiện diện trong compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
và compity_matrix.2.xml . Do đó, health@1.0
được coi là không được dùng nữa.
Không dùng nữa khung HAL
Khi một khung nhất định HAL foo@xy
không được dùng nữa ở FCM Phiên bản F
, điều đó có nghĩa là mọi thiết bị khởi chạy với Target FCM Phiên bản V = F
trở lên không được mong đợi khung cung cấp foo
tại phiên bản xy
hoặc ở bất kỳ phiên bản nào cũ hơn xy
. Một phiên bản HAL không được dùng nữa vẫn được cung cấp trong khuôn khổ 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@xy
được coi là không được dùng nữa nếu tệp kê khai khung chỉ định max-level=" F - 1 "
cho foo@xy
. Đối với các thiết bị khởi chạy với V = F
, khung không cung cấp HAL foo@xy
. Ma trận tương thích thiết bị trên các thiết bị khởi chạy với V = F
không được liệt kê các HAL khung có max-level < V
Ví dụ: trong Android 12, schedulerservice@1.0
không còn được dùng nữa. Thuộc tính max-level
của nó được đặt thành 5
, phiên bản FCM được giới thiệu trong Android 11. Xem bảng kê khai khung Android 12 .
Loại bỏ hỗ trợ cho các phiên bản FCM mục tiêu
Khi các thiết bị hoạt động của Target FCM Phiên bản V
nhất định giảm xuống dưới một ngưỡng nhất định, Phiên bản FCM mục tiêu sẽ bị xóa khỏi bộ S F của bản phát hành khung tiếp theo. Việc này được thực hiện bằng cả hai bước sau:
Xóa
compatibility_matrix.V.xml
khỏi quy tắc xây dựng (để nó không được cài đặt trên hình ảnh hệ thống) và xóa mọi mã đã triển khai hoặc phụ thuộc vào chức năng đã xóa.Xóa HAL khung có
max-level
thấp hơn hoặc bằngV
khỏi bảng kê khai khung và xóa mọi mã triển khai HAL khung đã xóa.
Các thiết bị có Phiên bản FCM mục tiêu nằm ngoài SF cho một bản phát hành khung nhất đị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 thứ tự thời gian) các trạng thái có thể có của Phiên bản HAL.
Chưa phát hành
Đối với HAL của thiết bị, nếu Phiên bản HAL không có trong bất kỳ ma trận tương thích công khai và cố định nào thì phiên bản đó được coi là chưa được phát hành và có thể đang được phát triển. Điều này bao gồm 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,
health@2.0
HAL được coi là HAL chưa được phát hành và chỉ hiện diện trongcompatibility_matrix.3.xml
. -
teleportation@1.0
HAL không có trong bất kỳ ma trận tương thích nào được phát hành và cũng được coi là HAL chưa được phát hành.
Đối với HAL khung, nếu phiên bản HAL chỉ nằm trong bảng kê khai khung của một nhánh phát triển không liên quan thì phiên bản đó được coi là chưa được phát hành.
Đã phát hành và hiện tại
Đối với HAL của thiết bị, nếu Phiên bản HAL nằm trong bất kỳ ma trận tương thích công khai và cố định nào thì phiên bản đó sẽ được phát hành. Ví dụ: sau khi FCM Phiên bản 3 bị đóng băng và xuất bản lên AOSP, HAL health@2.0
được coi là Phiên bản HAL hiện tại và đã phát hành.
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 thì phiên bản HAL là phiên bản hiện tại (tức là không bị phản đối). 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
vẫn tiếp tục tồn tại trong compatibility_matrix.3.xml
cũng được coi là Phiên bản HAL hiện tại và đã phát hành.
Đối với HAL khung, nếu phiên bản HAL nằm trong bảng kê khai khung của nhánh được phát hành mới nhất mà 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, thì đó được coi là phiên bản đã phát hành. và phiên bản HAL hiện tại. Ví dụ: displayservice
HAL được phát hành và hiện có trong Android 12, như được chỉ định trong tệp kê khai khung Android 12 .
Đã phát hành nhưng không được dùng nữa
Đối với HAL của thiết bị, Phiên bản HAL không được dùng nữa khi và chỉ khi đáp ứng tất cả những điều sau đây:
- Nó được phát hành.
- Nó không 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.
- Khung này vẫn hỗ trợ ma trận tương thích công khai và cố định.
Ví dụ:
- HAL
health@1.0
nằm trongcompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
vàcompatibility_matrix.2.xml
, nhưng không có trongcompatibility_matrix.3.xml
. Do đó, nó được coi là không được dùng nữa trong Android 9. - Power HAL có một bản nâng cấp phiên bản nhỏ trong Android 9, nhưng
power@1.0
vẫ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
hiện có nhưng KHÔNG được dùng nữa trong Android 9.
Đối với HAL khung, nếu phiên bản HAL nằm trong bảng kê khai khung của nhánh được phát hành mới nhất với 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 thì đó được coi là phiên bản HAL đã phát hành nhưng không được dùng nữa. Ví dụ: schedulerservice
HAL đã được phát hành nhưng không được dùng nữa trong Android 12, như được chỉ định trong tệp kê khai khung Android 12 .
LOẠI BỎ
Đối với HAL của thiết bị, Phiên bản HAL bị xóa khi và chỉ khi những điều sau đây là đúng:
- Nó đã được phát hành trước đó.
- Nó không có trong bất kỳ ma trận tương thích công khai và cố định nào mà khung hỗ trợ.
Các ma trận tương thích được công khai, cố định nhưng không được khung hỗ trợ sẽ được lưu giữ trong cơ sở mã để xác định bộ Phiên bản HAL đã loại bỏ để các bài kiểm tra VTS có thể được viết nhằm đảm bảo các HAL đã loại bỏ không có trên các thiết bị mới.
Đối với HAL khung, phiên bản HAL sẽ bị xóa khi và chỉ khi đáp ứng những điều sau:
- Nó đã được phát hành trước đó.
- Nó không có trong bất kỳ bảng kê khai khung nào của nhánh được phát hành mới nhất.
FCM kế thừa
Phiên bản FCM mục tiêu kế thừa là một giá trị đặc biệt cho tất cả các thiết bị không phải Treble. FCM cũ, compatibility_matrix.legacy.xml
, liệt kê các yêu cầu của khung trên các thiết bị cũ (tức là các thiết bị được khởi chạy trước Android 8.0).
Nếu tệp này tồn tại cho FCM có phiên bản F
thì mọi thiết bị không phải Treble đều có thể được nâng cấp lên F
miễn là bản kê khai thiết bị của nó tương thích với tệp này. Việc xóa nó tuâ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 (được xóa sau khi số lượng thiết bị hoạt động trước 8.0 giảm xuống dưới một ngưỡng nhất định).
Các phiên bản FCM đã phát hành
Bạn có thể tìm thấy 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
.