Vòng đời FCM

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:

  1. Sao chép compatibility_matrix.<F-1>.xml mới nhất vào compatibility_matrix.F.xml.
  2. Cập nhật thuộc tính level trong tệp thành F.
  3. 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ới V = 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ới V = 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)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ép x.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ành x.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ản x.0, nếu thiết bị đi kèm V = F phải chạy bằng x.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ới V = 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ới V = 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.xmlcompatibility_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.xmloptional="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:

  1. Đảm bảo compatibility_matrix.F.xml có thuộc tính level="F".
  2. Đảm bảo tất cả thiết bị đều được tạo và khởi động.
  3. 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.
  4. 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:

  1. 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ỏ.

  2. Xoá các HAL khung có max-level thấp hơn hoặc bằng V 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ó trong compatibility_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ụ:

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.