Một bản phát hành khung Android có nhiều Ma trận tương thích khung (FCM), mỗi ma trận tương ứng với một 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. Trong vòng đời của FCM, Android sẽ không dùng và xoá các HAL HIDL, sau đó sửa đổi các tệp FCM để phản ánh trạng thái của phiên bản HAL.
Để bật OTA chỉ dành cho khung trong hệ sinh thái riêng, những đối tác mở rộng giao diện nhà cung cấp cũng nên không dùng nữa và xoá HIDL HAL bằng các phương thức tương tự.
Thuật ngữ
- Ma trận khả năng tương thích của khung (FCM)
- Tệp XML chỉ định các yêu cầu về khung trên các triển khai phù hợp của nhà cung cấp. Ma trận tương thích được phân phiên bản và một phiên bản mới sẽ đượ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.
- Các phiên bản FCM theo nền tảng (SF)
- 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 mọi quy trình triển khai của nhà cung cấp đáp ứng một trong những 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 một bản phát hành khung.
- Phiên bản FCM mục tiêu (V)
- Phiên bản FCM mục tiêu (từ SF), được khai báo rõ ràng trong tệp kê khai thiết bị mà một hoạt động triển khai của nhà cung cấp đáp ứng. Bạn phải tạo chế độ triển khai của nhà cung cấp dựa trên FCM đã xuất bản, mặc dù chế độ này 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
, sẽ bị bỏ qua trong toàn bộ tài liệu này). - Tệp kê khai thiết bị
- Tệp XML chỉ định những phiên bản HAL 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 tệp kê khai thiết bị bị hạn chế theo Phiên bản FCM mục tiêu của thiết bị nhưng có thể liệt kê các HAL mới hơn so với FC tương ứng với V.
- HAL thiết bị
- HAL được liệt kê (cung cấp) trong tệp kê khai thiết bị và được liệt kê trong ma trận tương thích của khung (FCM).
- Ma trận 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 đối với việc triển khai khung tuân thủ. Mỗi thiết bị chứa một DCM.
- Tệp kê khai khung
- Tệp XML chỉ định những phiên bản HAL mà phía khung của giao diện nhà cung cấp (bao gồm cả hình ảnh hệ thống, system_ext và sản phẩm) cung cấp. Các HAL trong tệp kê khai khung sẽ bị tắt một cách linh động theo Phiên bản FCM mục tiêu của thiết bị.
- HAL khung
- HAL được liệt kê là có trong tệp kê khai khung và được liệt kê trong ma trận khả năng tương thích của thiết bị (DCM).
Vòng đời FCM trong cơ sở mã
Tài liệu này mô tả vòng đời của FCM một cách trừu tượng. Để xem các tệp kê khai được hỗ trợ, hãy tham khảo hardware/interfaces/compatibility_matrices/compatibility_matrix.<FCM>.xml
, nơi bạn có thể tìm thấy FCM trong 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ị được vận chuyển cùng với Android 11 thường sẽ có FCM cấp 5, nhưng triển khai FCM cấp 6 trở lên, đi kèm với nhiều yêu cầu bổ sung được chỉ định trong ma trận tương thích. Sau đây là các cấp độ được hỗ trợ cho Android 15:
FCM | Phiên bản Android |
---|---|
5 | Android 11/R |
6 | Android 12/S |
7 | Android 13/T |
8 | Android 14/U |
202404 | Android 15/V |
Cấp độ FCM bằng hoặc mới hơn Cấp độ API của nhà cung cấp.
Khi Android ngừng hỗ trợ một cấp độ FCM, cấp độ đó vẫn được hỗ trợ cho các thiết bị hiện có. Các thiết bị nhắm đến các cấp FCM thấp hơn được ngầm cho phép sử dụng HAL có trong các cấp FCM mới hơn, miễn là các HAL đó có trong nhánh.
Phát triển trong 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 và 8.1). Trong quá trình phát triển, compatibility_matrix.F.xml
mới sẽ được tạo và compatibility_matrix.f.xml
hiện có (trong đó f
< F
) sẽ không còn thay đổi nữa.
Cách bắt đầu phát triển trong FCM phiên bản 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 tương ứng để cài đặt ma trận tương thích này vào thiết bị.
Giới thiệu một HAL mới
Trong quá trình phát triển, khi giới thiệu một HAL mới (Wi-Fi, NFC, v.v.) 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
.
Ví dụ: Android 8.1 đã giới thiệu cas@1.0
. Các thiết bị chạy Android 8.1 có thể triển khai HAL này, vì vậy, mục sau đây đã được thêm vào compatibility_matrix.F.xml
(trước đây tạm thời có tên là compatibility_matrix.current.xml
trong quá trình phát triển bản phát hành đó):
<hal format="hidl">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
Nâng cấp HAL (phụ)
Các phiên bản HAL AIDL được tính là các phiên bản HAL phụ. Các phiên bản giao diện HIDL có các phiên bản major.minor
như 1.2
.
Trong quá trình phát triển, khi một AIDL HAL có bản nâng cấp phiên bản từ 2
lên 3
ở Phiên bản FCM hiện tại F
, phiên bản mới sẽ được thêm vào mục HAL trong compatibility_matrix.F.xml
. Trường phiên bản của một mục HAL chấp nhận các dải như 2-3
.
Ví dụ: Android FCM F
đã giới thiệu foo@3
dưới dạng bản nâng cấp phiên bản phụ của HAL. Phiên bản cũ hơn, foo@2
, được dùng cho các thiết bị nhắm đến FCM cũ hơn, trong khi phiên bản mới hơn, foo@3
, có thể được dùng cho các thiết bị nhắm đến FCM Android F
. Mục nhập trong FCM cũ hơn trước phiên bản 2
có dạng như sau:
<hal format="aidl">
<name>foo</name>
<version>2</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Mục này đã được sao chép vào compatibility_matrix.F.xml
và sửa đổi để hỗ trợ phiên bản 3
như sau:
<hal format="aidl">
<name>foo</name>
<version>2-3</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Nâng cấp HAL (chính)
Trong quá trình phát triển, khi HAL có một bản nâng cấp phiên bản chính tại FCM Version 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 chế độ cài đặt sau:
- Chỉ phiên bản
x.0
, nếu các thiết bị đi kèm vớiV = F
phải khởi chạy bằngx.0
. - Với các phiên bản chính cũ trong cùng thẻ
<hal>
, nếu các thiết bị đi kèm vớiV = F
có thể khởi chạy bằng một phiên bản chính cũ.
Ví dụ: FCM phiên bản F
giới thiệu foo@2.0
dưới dạng bản nâng cấp phiên bản chính của HAL 1.0 và không dùng HAL 1.0 nữa. Phiên bản cũ hơn, foo@1.0
, được dùng cho các thiết bị nhắm đến các phiên bản FCM trước đó. Các thiết bị nhắm đến FCM phiên bản F
phải cung cấp phiên bản 2.0 mới nếu chúng cung cấp HAL. Trong ví dụ này, các phiên bản FCM trước đây có mục sau:
<hal format="hidl">
<name>foo</name>
<version>1.0</version>;
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Sao chép mục này vào compatibility_matrix.F.xml
và sửa đổi như sau:
<hal format="hidl">
<name>foo</name>
<version>2.0</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Giới hạn:
- Vì HAL 1.0 không có trong
compatibility_matrix.F.xml
, nên những thiết bị nhắm đến FCM phiên bảnF
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 các Phiên bản FCM cũ, nên khung này vẫn có thể hoạt động với HAL 1.0, do đó, khung này tương thích ngược với các thiết bị cũ nhắm đến các phiên bản FCM cũ.
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ỉ do Google thực hiện trong quá trình 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ị đều được tạo và khởi động.
- Cập nhật các kiểm thử VTS để đảm bảo những thiết bị khởi 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 là
V >= F
. - Xuất bản tệp lên AOSP.
Ví dụ: các kiểm thử VTS đảm bảo rằng các thiết bị khởi chạy bằng 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 đối với từng phiên bản FCM nền tảng. Việc phát hành các phiên bản FCM trên các phân vùng product và system_ext do chủ sở hữu của những hình ảnh này thực hiện, tương ứng. Số phiên bản FCM trên các phân vùng product 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 ở FCM phiên bản F trong các phân vùng product và system_ext phản ánh các yêu cầu trên thiết bị có FCM phiên bản F mục tiêu.
Ngừng sử dụng phiên bản HAL
Việc ngừng sử dụng một phiên bản HAL là quyết định của nhà phát triển (tức là đối với HAL AOSP, Google sẽ đưa ra quyết định). Điều này có thể xảy ra khi một phiên bản HAL cao hơn (dù là phiên bản phụ hay phiên bản chính) được phát hành.
Không dùng HAL thiết bị nữa
Khi một HAL foo@x.y
nhất định của thiết bị không được dùng nữa ở FCM phiên bản F
, điều này có nghĩa là mọi thiết bị khởi chạy bằng FCM phiên bản đích 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
. Khung này vẫn hỗ trợ phiên bản HAL không dùng nữa để nâng cấp thiết bị.
Khi FCM phiên bản F
được phát hành, HAL phiên bản foo@x.y
sẽ được coi là không dùng nữa nếu HAL phiên bản cụ thể không được nêu rõ trong FCM mới nhất cho FCM phiên bản đích V = F
. Đối với các thiết bị ra mắt cùng V = F
, một trong các điều kiện sau đây phải được đáp ứng:
- Khung này yêu cầu phiên bản cao hơn (chính hoặc phụ);
- Khung này không còn yêu cầu HAL nữa.
Ví dụ: trong Android 9, health@2.0
được giới thiệu là bản nâng cấp phiên bản chính của HAL 1.0. health@1.0
bị xoá khỏi compatibility_matrix.3.xml
nhưng có trong compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
và compatibility_matrix.2.xml.
Do đó, health@1.0
được xem là không dùng nữa.
Không dùng HAL khung nữa
Khi một HAL khung nhất định foo@x.y
không được dùng nữa ở FCM phiên bản F
, điều này có nghĩa là mọi thiết bị khởi chạy bằng FCM phiên bản đích V = F
trở lên đều không được mong đợi khung cung cấp foo
ở phiên bản x.y
hoặc ở bất kỳ phiên bản nào cũ hơn x.y
. Khung này vẫn cung cấp một phiên bản HAL không dùng nữa để nâng cấp thiết bị.
Khi FCM phiên bản F
được phát hành, HAL phiên bản foo@x.y
sẽ được coi là không dùng nữa nếu tệp kê khai khung chỉ định max-level="F - 1"
cho foo@x.y
. Đối với các thiết bị khởi chạy bằng V = F
, khung này không cung cấp HAL foo@x.y
. Ma trận khả năng tương thích của thiết bị trên các thiết bị ra mắt bằng 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 API này được đặt thành 5
, là phiên bản FCM được giới thiệu trong Android 11. Xem tệp kê khai khung Android 12.
Ngừng hỗ trợ các phiên bản FCM mục tiêu
Khi số lượng thiết bị đang hoạt động của một Phiên bản FCM mục tiêu V
nào đó giảm xuống dưới một ngưỡng nhất định, Phiên bản FCM mục tiêu đó sẽ bị xoá khỏi tập hợp SF 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 các quy tắc xây dựng (để không được 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 các chức năng đã xoá.Xoá các HAL khung có
max-level
nhỏ hơn hoặc bằngV
khỏi tệp kê khai khung và xoá mọi mã triển khai các HAL khung đã xoá.
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 đó.
Xoá các HAL không dùng nữa
Khi một phiên bản FCM bị xoá, một số giao diện HAL hoặc các phiên bản của giao diện HAL sẽ không còn xuất hiện trong bất kỳ FCM nào. Điều này có nghĩa là Android không còn hỗ trợ các thiết bị này nữa, ngay cả khi nâng cấp thiết bị.
Sau khi HAL không còn được hỗ trợ, nhà phát triển sẽ xoá các tham chiếu đến giao diện HAL đó khỏi Android, kể cả trong mã ứng dụng trong khung, quá trình triển khai mặc định và các trường hợp kiểm thử VTS.
Nếu không có HAL được hỗ trợ nào kế thừa từ HAL đang bị xoá, thì bạn có thể xoá chính định nghĩa HAL bằng một vài bước bổ sung.
- Xoá định nghĩa giao diện HAL khỏi mã nguồn. Trong đó có các tệp
*.aidl
và mô-đunAndroid.bp
aidl_interface
. - Nếu là HIDL, hãy xoá HASH khỏi
hardware/interfaces/current.txt
. - Nếu AIDL, hãy xoá thư mục
aidl_api
có các tệp AIDL cố định. - Xoá giao diện khỏi
hardware/interfaces/compatibility_matrices/exclude/fcm_exclude.cpp
.
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 một Phiên bản HAL.
Chưa phát hành
Đối với HAL thiết bị, nếu một 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 phát hành và có thể đang trong quá trình phát triển.
Trong đó 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 chưa phát hành và chỉ có trongcompatibility_matrix.3.xml
. - HAL
teleportation@1.0
không có trong ma trận tương thích đã phát hành nào và cũng được coi là một HAL chưa phát hành.
Đối với HAL khung, nếu một 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ì phiên bản đó sẽ được coi là chưa phát hành.
Đã phát hành và hiện tại
Đối với HAL thiết bị, nếu một 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 được cố định và xuất bản lên AOSP, HAL health@2.0
sẽ được coi là HAL phiên bản hiện tại và đã phát hành.
Nếu một 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ị ngừng hoạt động). 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 trong compatibility_matrix.3.xml
cũng được coi là các phiên bản HAL đã phát hành và hiện tại.
Đối với các HAL khung, nếu một phiên bản HAL nằm trong tệp kê khai khung của nhánh phát hành mới nhất mà không có thuộc tính max-level
hoặc (thường là) 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ì phiên bản đó được coi là phiên bản HAL đã phát hành và hiện tại. Ví dụ: HAL displayservice
đượ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 dùng nữa
Đối với HAL thiết bị, một Phiên bản HAL sẽ không được dùng nữa nếu và chỉ khi đáp ứng tất cả các điều kiện sau:
- Đã phát hành.
- Không có trong ma trận tương thích công khai và cố định có Phiên bản FCM cao nhất.
- Đây là một ma trận tương thích công khai và cố định mà khung vẫn hỗ trợ.
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 nằm trongcompatibility_matrix.3.xml
. Do đó, phương thức 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 phiên bản phụ trong Android 9, nhưng
power@1.0
vẫn ởcompatibility_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 bị ngừng sử dụng trong Android 9.
Đối với các HAL khung, nếu một phiên bản HAL nằm trong tệp kê khai khung của nhánh phát hành mới nhất có thuộc tính max-level
thấp hơn phiên bản FCM phát hành 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ụ: HAL schedulerservice
đượ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.
Đã xoá
Đối với HAL thiết bị, Phiên bản HAL sẽ bị xoá nếu và chỉ nếu các điều kiện sau đây là đúng:
- Trước đây, mã này đã được phát hành.
- Khung này không nằm trong ma trận tương thích công khai và cố định mà khung hỗ trợ.
Các ma trận tương thích công khai, cố định nhưng không được khung hỗ trợ sẽ được giữ lại trong cơ sở mã để xác định tập hợp Phiên bản HAL đã bị xoá, nhờ đó, có thể viết các kiểm thử VTS để đảm bảo các HAL đã bị xoá không có trên các thiết bị mới.
Đối với HAL khung, một phiên bản HAL sẽ bị xoá nếu và chỉ nếu đáp ứng các điều kiện sau:
- Trước đây, mã này đã được phát hành.
- Nó không có trong bất kỳ tệp kê khai khung nào của nhánh phát hành gần đây nhất.
FCM cũ
Target FCM Version legacy 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ị ra mắt 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ể nâng cấp lên F
, miễn là tệp kê khai thiết bị của thiết bị đó tương thích với tệp này. Việc xoá FCM này cũng tuân theo quy trình tương tự như FCM cho các Phiên bản FCM mục tiêu khác (bị xoá sau khi số lượng thiết bị đang hoạt động có phiên bản 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ể xem danh sách các phiên bản FCM đã phát hành trong phần hardware/interfaces/compatibility_matrices
.
Để biết 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
.