Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Vòng đời FCM

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Bản phát hành khung Android có nhiều Ma trận tương thích khung (FCM) —một 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 đối với 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ó khuôn khổ 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) Tệp XML chỉ định các yêu cầu khung về việc triển khai nhà cung cấp phù hợp. Ma trận tương thích được tạo phiên bản và một phiên bản mới được đóng băng 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 có thể hoạt động với bất kỳ triển khai của nhà cung cấp nào đá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 tệp 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.)
Tệp 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 nhà cung cấp và hình ảnh ODM, cung cấp. Nội dung của tệp kê khai thiết bị bị hạn chế bởi phiên bản FCM đích 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 FCM tương ứng với V.
HAL của thiết bị HAL được liệt kê (cung cấp) trong bản 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 khuôn khổ tuân thủ. 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 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 được tắt động theo phiên bản Target FCM của thiết bị.
Khung HAL 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).

Phát triển trong một 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.current.xml mới được tạo ( F ) và compatibility_matrix.f.xml hiện có (trong đó f < F ) không còn bị thay đổi nữa.

Để bắt đầu phát triển trong FCM Phiên bản F mới:

  1. Sao chép tương thích mới compatibility_matrix.<F-1>.xml sang compatibility_matrix.current.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 mới (Wi-Fi, NFC, v.v.) cho Android trên FCM Phiên bản F hiện tại, hãy thêm HAL vào compatibility_matrix.current.xml với các cài đặt optional sau:

  • optional="false" nếu các thiết bị có V = F phải khởi chạy bằng HAL này,

    HOẶC
  • optional="true" nếu các thiết bị có V = F có thể khởi chạy mà không có 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ị khởi chạy với Android 8.1 không bắt buộc phải triển khai HAL này, vì vậy mục nhập sau đây đã được thêm vào compatibility_matrix.current.xml (được đổi tên thành compatibility_matrix.2.xml sau khi phát hành Android 8.1):

<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 (trẻ vị thành niên)

Trong quá trình phát triển, khi HAL nâng cấp phiên bản nhỏ từ xz lên x.(z+1) ở phiên bản 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.current.xml phải trạng thái x.(z+1)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.current.xml thích_matrix.current.xml phải sao chép xy-z và tùy chọn từ compatibility_matrix.<F-1>.xml và thay đổi phiên bản thành xw-(z+1) (trong đó w >= y ).

Ví dụ: Android 8.1 đã giới thiệu broadcastradio@1.1 như một 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ị 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ị 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.current.xml (được đổi tên thành compatibility_matrix.2.xml sau khi phát hành Android 8.1) 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 tại FCM Phiên bản F hiện tại, phiên bản chính mới x.0 được thêm vào compatibility_matrix.current.xml thích_matrix.current.xml với các cài đặt optional sau:

  • optional="false" chỉ với phiên bản x.0 , nếu thiết bị có V = F phải khởi chạy với x.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 <hal> , nếu thiết bị có V = F phải khởi chạy với 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ị có V = F không phải khởi chạy HAL.

Ví dụ: Android 9 giới thiệu health@2.0 là bản nâng cấp phiên bản chính của 1.0 HAL và không dùng 1.0 HAL 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ị khởi chạy với Android 9 không được cung cấp phiên bản 1.0 HAL không dùng nữa và thay vào đó phải cung cấp phiên bản 2.0 mới. Trong compatibility_matrix.legacy.xml , compatibility_matrix.1.xmlcompatibility_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.current.xml (được đổi tên thành compatibility_matrix.3.xml với bản phát hành Android 9) 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ì 2.0 HAL ở trong compatibility_matrix.3.xml với optional="false" , các thiết bị khởi chạy với Android 9 phải xuất xưởng với 2.0 HAL.
  • Vì 1.0 HAL không có trong compatibility_matrix.3.xml , các thiết bị khởi chạy với Android 9 không được cung cấp 1.0 HAL (vì HAL này được coi là không được dùng nữa).
  • Vì 1.0 HAL hiện diện trong kế thừa / 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 1.0 HAL (không được coi là Phiên bản HAL đã bị xóa ).

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ỉ do 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:

  1. Đổi tên compatibility_matrix.current.xml thích_matrix.current.xml thành compatibility_matrix.F.xml .
  2. Đảm bảo tệp có level="F" .
  3. Chỉnh sửa các quy tắc xây dựng tương ứng để phản ánh sự thay đổi tên tệp.
  4. Đảm bảo tất cả các thiết bị xây dựng và khởi động.
  5. Cập nhật các bài kiểm tra 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
  6. Xuất bản tệp lên AOSP.

Không thể thay đổi tệp này sau khi được đổi tên và xuất bản. Ví dụ: trong quá trình phát triển Android 9, các tệp sau được tạo cho hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.current.xml

Khi Android 9 được phát hành, compatibility_matrix.current.xml được đổi tên thành compatibility_matrix.3.xml và các tệp sau được tạo cho hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.3.xml

Các bài kiểm tra VTS đảm bảo rằng các thiết bị khởi chạy với 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 phiên bản FCM trên 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 sản phẩm và phân vùng system_ext phải phù hợ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 phân vùng product 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.

Phiên bản HAL không còn 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 đư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 chính) được phát hành.

Không chấp nhận 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à bất kỳ thiết bị nào khởi chạy với Target FCM Phiên bản 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 dùng nữa vẫn được hỗ trợ bởi khung 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 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 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ụ);
  • Khuôn khổ không 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 1.0 HAL. health@1.0 đã bị xóa khỏi compatibility_matrix.3.xml thích_matrix.3.xml nhưng vẫn có trong compatibility_matrix.legacy.xml thích_matrix.legacy.xml, compatibility_matrix.1.xml thích_matrix.1.xml và compatibility_matrix.2.xml thích_matrix.2.xml. Do đó, health@1.0 được coi là không được dùng nữa.

Ngừng sử dụng khung HAL

Khi một khung cụ thể HAL foo@xy không được dùng nữa ở FCM Phiên bản F , điều đó có nghĩa là bất kỳ thiết bị nào 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 ở 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 dùng nữa vẫn được cung cấp bởi khung 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 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 , khuôn khổ không cung cấp HAL foo@xy . Ma trận khả năng tương thích của 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 với max-level < V .

Ví dụ: trong Android 12, schedulerservice@1.0 không đượ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 tệp 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ị đang hoạt động của một phiên bản FCM mục tiêu 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 tập hợp S F của bản phát hành khung tiếp theo. Điều này được thực hiện bằng cả hai bước sau:

  • Loại bỏ compatibility_matrix.V.xml thích_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 bất kỳ mã nào được 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ằng V khỏi tệp kê khai khung và xóa bất kỳ mã nào triển khai HAL khung đã xóa.

Các thiết bị có Phiên bản FCM mục tiêu bên ngoài S F cho 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 nằm trong bất kỳ ma trận tương thích công khai và cố định nào, 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.current.xml . Ví dụ:

  • Trong quá trình phát triển Android 9 (trước khi compatibiility_matrix.current.xml thích_matrix.current.xml được đổi tên thành compatibility_matrix.3.xml thích_matrix.3.xml), health@2.0 HAL được coi là một HAL chưa được phát hành.
  • Dịch teleportation@1.0 thời@1.0 HAL không nằm trong bất kỳ ma trận tương thích đã phát hành nào và cũng được coi là HAL chưa được phát hành.

Đối với các HAL khung, nếu phiên bản HAL chỉ nằm 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 đó đượ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 (khi compatibiility_matrix.current.xml thích_matrix.current.xml được đổi tên thành compatibility_matrix.3.xml thích_matrix.3.xml) và được xuất bản lên AOSP, thì health@2.0 HAL đượ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 khả năng tương thích công khai và cố định có Phiên bản FCM cao nhất (không bao gồm compatibility_matrix.current.xml ), thì phiên bản HAL 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 ) tiếp tục tồn tại trong compatibility_matrix.3.xml cũng được coi là Phiên bản HAL đã phát hành và hiện tại.

Đối với HAL khung, nếu phiên bản HAL nằm trong tệp 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ì phiên bản đó được coi là đã phát hành và phiên bản HAL hiện tại. Ví dụ: HAL dịch vụ displayservice được phát hành và hiện có trong Android 12, như được chỉ định bởi Android 12framework manifest .

Đã 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 nếu và chỉ khi tất cả những điều sau được đáp ứng:

  • 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.
  • Nó nằm trong ma trận tương thích công khai và cố định mà khung công tác vẫn hỗ trợ.

Ví dụ:

Do đó power@1.0 hiện tại nhưng KHÔNG bị phản đối trong Android 9.

Đối với HAL khung, nếu phiên bản HAL nằm trong tệp kê khai khung của nhánh được phát hành mới nhất có thuộc tính max-level thấp 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 nhưng không được dùng nữa. Ví dụ: dịch vụ lập schedulerservice HAL được phát hành nhưng không được dùng nữa trong Android 12, như được chỉ định bởi Android 12framework manifest .

Loại bỏ

Đối với HAL của thiết bị, Phiên bản HAL sẽ bị xóa nếu và chỉ khi những điều sau là đúng:

  • Nó đã được phát hành trước đó.
  • Nó 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 hỗ trợ.

Ma trận tương thích công khai, cố định, nhưng không được khung hỗ trợ được lưu giữ trong cơ sở mã để xác định bộ Phiên bản HAL đã bị loại bỏ để các bài kiểm tra VTS có thể được viết để đảm bảo các HAL đã bị 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 bị xóa nếu và chỉ khi đáp ứng các điều kiện sau:

  • Nó đã được phát hành trước đó.
  • Nó 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 kế thừa

Mục tiêu Phiên bản FCM kế thừa là một giá trị đặc biệt cho tất cả các thiết bị không phải là Treble. FCM cũ, compatibility_matrix.legacy.xml thích_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 với 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à tệp 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 (bị xóa sau khi số lượng thiết bị trước 8.0 đang hoạt động giảm xuống dưới một ngưỡng nhất định).

Các phiên bản FCM đã phát hành

Danh sách các phiên bản FCM đã phát hành có thể được tìm thấy trong hardware/interfaces/compatibility_matrices .

Để tìm phiên bản FCM được phát hành cùng với một phiên bản Android cụ thể, hãy xem Level.h .