FCM 生命週期

Android 架構版本有多個架構相容性矩陣 (FCM),每個可升級的目標 FCM 版本各有一個。 該架構可能會使用 和目標 FCM 版本需求FCM 的一部分 Android 會淘汰並移除 HIDL HAL,然後將 FCM 檔案修改為 反映 HAL 版本的狀態。

為了在自家生態系統中啟用僅限架構的 OTA,透過 供應商介面也應淘汰並移除 HIDL HAL,以相同的方式使用 方法。

術語

架構相容性矩陣 (FCM)
指定符合供應商架構需求的 XML 檔案 。相容性矩陣經過版本化與新版本 已凍結。每個架構版本都包含 多位 FCM。
平台 FCM 版本 (SF)
架構版本中的所有 FCM 版本組合。這個架構可以 且供應商導入方式符合下列任一 FCM 功能。
FCM 版本 (F)
架構版本中所有 FCM 的最高版本。
目標 FCM 版本 (V)
裝置上明確宣告的 FCM 版本 (來源為 SF) 才能滿足供應商實作項目的需求供應商導入作業必須 產生的 FCM 版本,但後者可能會在其中宣告較新的 HAL 版本 裝置資訊清單。
HAL 版本
HAL 版本的格式為 foo@x.y,其中 foo 是 HAL 名稱,x.y 是 特定版本;例如:nfc@1.0keymaster@3.0 (根前置字元,例如 android.hardware,也會省略。)
裝置資訊清單
用於指定供應商介面裝置端裝置端的 HAL 版本的 XML 檔案。 包括廠商和 ODM 映像檔裝置資訊清單的內容 裝置的目標 FCM 版本會受到限制,但可列出 相對更新 (相對於對應 V.的 FC)。
裝置 HAL
裝置資訊清單列出 (已提供) 的 HAL (必要或選用)。
裝置相容性矩陣 (DCM)
指定供應商規定符合架構要求的 XML 檔案 。每部裝置各有一個 DCM。
架構資訊清單
一種 XML 檔案,用於指定供應商架構端的 HAL 版本 介面,包括 system、system_ext 和產品映像檔HAL 的 系統會根據裝置的目標 FCM 動態停用架構資訊清單 版本。
架構 HAL
HAL (列於架構資訊清單內),並列為 裝置相容性矩陣 (DCM) 的必要或選用設定。

程式碼集的 FCM 生命週期

本文件說明摘要中的 FCM 生命週期。為了瞭解 支援的資訊清單,請參閱 hardware/interfaces/compatibility_matrix.<FCM>.xml FCM 找上門 system/libvintf/include/vintf/Level.h

裝置出貨時,應有相應的 Android 發布版本 FCM 值大於或等於同等等級。舉例來說 搭載 Android 11 的裝置出貨通常採用 FCM 等級 5,但採用 FCM 第 6 級以上,該級別有各種其他規定 。支援的等級如下:

FCM 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

即使 Android 淘汰了 FCM 級別,現有裝置仍支援此級別。

使用新的 FCM 版本進行開發

Android 會累加每個架構版本的 FCM 版本 (例如 Android 8 和 8.1)。在開發期間,新的 compatibility_matrix.F.xml 是 已建立,且現有的 compatibility_matrix.f.xml (其中 f < F) 不是 這些錯誤。

如何使用新的 FCM 版本 F 開始開發:

  1. 將最新的「compatibility_matrix.<F-1>.xml」複製到 compatibility_matrix.F.xml
  2. 將檔案中的 level 屬性更新為 F
  3. 新增對應的建構規則,將這個相容性矩陣安裝到 裝置。

引入新的 HAL

在開發期間向 Android 推出新的 HAL (Wi-Fi、NFC 等) 時 目前的 FCM 版本 F,請在 compatibility_matrix.F.xml 中新增 HAL。 以下 optional 設定:

  • 如果隨附 V = F 的裝置必須搭配此 HAL 啟動,optional="false"
  • 如果搭載 V = F 的裝置可在沒有此 HAL 的情況下啟動,則為 optional="true"

舉例來說,Android 8.1 推出了 cas@1.0 做為選用的 HAL。裝置數 搭載 Android 8.1 版本時,不需要實作此 HAL,因此 已將下列項目新增至「compatibility_matrix.F.xml」(過去 名為 compatibility_matrix.current.xml 的開發階段 版本):

<hal format="hidl" optional="true">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

升級 HAL (次要)

在開發期間,如果 HAL 將子版本從 x.z 升級至 目前 FCM 版本 Fx.(z+1),若該版本符合以下條件:

  • 使用「V = F」和「compatibility_matrix.F.xml」啟動的裝置需要此權限 必須狀態 x.(z+1)optional="false"
  • 使用 V = F 啟動的裝置不需要。 compatibility_matrix.F.xml 必須從以下欄位複製 x.y-z 和選填屬性 compatibility_matrix.<F-1>.xml,並將版本變更為 x.w-(z+1) (其中 w >= y)。

舉例來說,Android 8.1 推出了 broadcastradio@1.1 做為子版本 1.0 HAL 的升級版本舊版本 broadcastradio@1.0 是選用項目, 推出 Android 8.0 及新版作業系統的裝置 broadcastradio@1.1 是搭載 Android 8.1 版本裝置的選用項目。於 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>

這個項目已複製到 compatibility_matrix.F.xml,並依照下列方式修改:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

升級 HAL (主要)

在開發期間,當 HAL 在目前的 FCM 主要版本升級時 F 版本,已新增主要版本 x.0 compatibility_matrix.F.xmloptional 設定如下:

  • 僅搭載 x.0optional="false" (如果裝置出貨時) V = F 必須使用 x.0 啟動。
  • optional="false",以及同一個 <hal> 中的較舊的主要版本 標記,如果搭載 V = F 的裝置必須以此 HAL 啟動,但可以啟動 最新的主要版本
  • 如果搭載 V = F 的裝置無需啟動 optional="true" HAL。

舉例來說,Android 9 會將 health@2.0 做為 1.0 HAL 的主要版本升級,並淘汰 1.0 HAL。較舊的 版本 health@1.0 適用於搭載 Android 8.0 以上版本的裝置 Android 8.1.搭載 Android 9 的裝置必須 提供新的 2.0 版本舉例來說 compatibility_matrix.legacy.xmlcompatibility_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>

將這個項目複製到「compatibility_matrix.F.xml」,並修改為 如下:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

限制:

  • 由於 2.0 HAL 採用的是 compatibility_matrix.3.xml optional="false",推出搭載 Android 的裝置 9 須搭配 2.0 HAL 出貨。`
  • 由於 1.0 HAL 不在 compatibility_matrix.3.xml 中, 搭載 Android 9 的裝置不得提供 1.0 HAL (因為這個 HAL 被視為已淘汰)
  • 因為 1.0 HAL 存在 legacy/1/2.xml 中 (也就是 Android 9 可與某些 HAL 搭配使用) 做為選用的 HAL、 Android 9 架構仍可搭配 1.0 HAL 運作 (這不會視為已移除的 HAL 版本)。

新的 FCM 版本

在系統分區上發布 FCM 版本的程序僅止於此 包含下列步驟:

  1. 請確認 compatibility_matrix.F.xml 具有 level="F" 屬性。
  2. 請確保所有裝置已建構並啟動。
  3. 更新 VTS 測試 確保裝置搭載最新的架構 ( 在 Shipping API 級別) 使用目標 FCM 版本 V >= F
  4. 將檔案發布到 Android 開放原始碼計畫。

例如 VTS 測試 確保裝置搭載 Android 作業系統 9 個目標 FCM 版本 >= 3。

此外,產品和 system_ext FCM 可能也會列出 平台 FCM 版本。產品和 system_ext 上的 FCM 版本 分區則由這些映像檔的擁有者分別執行。FCM 版本 產品和 system_ext 分區上的數字必須與 系統分區與系統分區中的 FCM 版本類似 FCM 版本 F 的相容性矩陣,以及 system_ext 分區 反映目標 FCM 版本 F 的裝置需求。

HAL 版本淘汰

淘汰 HAL 版本是開發人員決定 (即 Google 對 Android 開放原始碼計畫 HAL、Google 做出決策)。當 HAL 版本較高 (無論是次要或 推出。

淘汰裝置 HAL

當特定裝置 HAL foo@x.y 在 FCM 版本 F 淘汰時, 任何搭載目標 FCM V = F 以上版本的裝置,皆不得 實作 foo,版本為 x.y 或任何早於 x.y 的版本。已淘汰 用於升級裝置的架構仍支援 HAL 版本。

發布 FCM 版本 F 時,系統會採用 HAL 版本 foo@x.y 已淘汰 (如果最新版本中未明確指出特定的 HAL 版本) 目標 FCM 版本 V = F 的 FCM。如果是搭載 V = F 的裝置,請採用下列其中之一: 符合以下條件:

  • 架構需要更高版本 (主要或次要)。
  • 架構不再需要 HAL。

舉例來說,在 Android 9 中導入了 health@2.0 與 1.0 HAL 的主要升級已從以下位置移除「health@1.0」: compatibility_matrix.3.xml,但目前位於 compatibility_matrix.legacy.xmlcompatibility_matrix.1.xml、 和 compatibility_ Matrix.2.xml。 因此 health@1.0 視為已淘汰。

淘汰架構 HAL

在 FCM 版本 F 淘汰特定架構 HAL foo@x.y 時, 任何搭載目標 FCM V = F 以上版本的裝置,皆不得 預期架構會提供 foo 版本 x.y,或任何較舊版本 而不是 x.y。但模型使用的架構仍會提供已淘汰的 HAL 版本 正在升級裝置。

發布 FCM F 版時,系統會採用 HAL 版本 foo@x.y 如果架構資訊清單指定 foo@x.ymax-level="F - 1"。裝置啟動時 與 V = F 的關聯,此架構不提供 HAL foo@x.y。裝置 在透過 V = F 啟動的裝置上,相容性矩陣不得列出架構 HAL 使用 max-level < V

舉例來說,在 Android 12 中,schedulerservice@1.0 是 已淘汰。其 max-level 屬性已設為 5,即導入 FCM 版本 在 Android 11 中。詳情請見 Android 12 架構 資訊清單

停止支援目標 FCM 版本

當特定目標 FCM 版本 V 的使用中裝置數量降到特定值以下時 門檻,目標 FCM 版本就會從 下個單元將深入探討 活化函數等類神經網路此作業由下列兩個步驟完成:

  1. 從建構規則中移除 compatibility_matrix.V.xml,使其不行 刪除安裝在系統映像檔上的任何程式碼,以及刪除 完全取決於已移除的功能

  2. 從以下位置移除 max-level 低於或等於 V 的架構 HAL 刪除任何執行已移除映像檔的程式碼 HAL 的運作方式

具備特定架構目標 FCM 版本不是 SF 的裝置 版本無法升級至該版本。

HAL 版本狀態

以下各節說明可能的狀態 (按時間順序排列) HAL 版本

尚未發布的項目

針對裝置 HAL (如果 HAL 版本未屬於公開內容且凍結) 並視為未發布,可能在開發中。 這包含僅 compatibility_matrix.F.xml 中的 HAL 版本。 例如:

  • 在 Android 9 的開發期間 health@2.0 HAL 被認為是尚未發布的 HAL, compatibility_matrix.3.xml
  • teleportation@1.0 HAL 並未在任何已發布的相容性矩陣中,而且 也視為未發布的 HAL

針對架構 HAL,如果 HAL 版本只出現在架構資訊清單中 不相關的開發分支,就會視為未發布。

已發行且目前版本

針對裝置 HAL (HAL 版本為任何公開且凍結) 時 都會釋放。舉例來說,在 FCM 版本 3 凍結並發布後 系統會將 health@2.0 HAL 視為已發布的 HAL 版本。

如果 HAL 版本位於公開相容性矩陣,且該矩陣有 FCM 版本最高的是 HAL 版本 (即未淘汰)。適用對象 例如:現有的 HAL 版本 (例如nfc@1.0 compatibility_matrix.legacy.xml) 繼續保留在「compatibility_matrix.3.xml」中的 以及現行的 HAL 版本

針對架構 HAL,如果在架構資訊清單中提供 HAL 版本 最新發布的分支版本中,不含 max-level 屬性,或 (非通常) max-level 等於或高於此分支版本中發布的 FCM 版本,而是 是已發布的 HAL 版本舉例來說, displayservice HAL 已發布並支援 Android 裝置 12,由 Android 12 架構 資訊清單

已發布但已淘汰

對於裝置 HAL 來說,只有符合下列所有條件時,HAL 版本才會淘汰 滿足:

  • 已發布。
  • 它不在公開且凍結相容性矩陣 FCM 版本。
  • 它屬於公開的凍結相容性矩陣,但架構仍然是 支援。

例如:

因此,power@1.0 目前在 Android 中,但「未」淘汰 9.

針對架構 HAL,如果 HAL 版本位於 發布的分支版本,max-level 屬性低於 FCM 版本 才會視為已發布但已淘汰的 HAL 版本。適用對象 舉例來說,schedulerservice HAL 已釋出,但已於 Android 12 (由 Android 12 架構資訊清單

已移除

對於裝置 HAL 來說,只有在下列情況下,系統才會移除 HAL 版本: 是:

  • 先前已發布。
  • 它不在與此架構的公開和凍結相容性矩陣中 支援。

相容性矩陣可供公開、凍結但不受 架構會保留在程式碼集中,以定義已移除的 HAL 版本, ,確保可編寫 VTS 測試,確保已移除的 HAL 不會轉移到新裝置。

架構 HAL 必須符合下列條件,系統才會移除 HAL 版本 滿足:

  • 先前已發布。
  • 不包含在最新發布分支版本的任何架構資訊清單中。

舊版 FCM

針對所有非 Treble 裝置,目標 FCM 版本都是特殊的值。 舊版 FCM (compatibility_matrix.legacy.xml) 列出了相關規定 也就是 Android 8.0 以下版本的裝置。

如果 FCM 版本為 F 的 FCM 可下載這個檔案, 升級至 F,前提是其裝置資訊清單與這個檔案相容。結果 移除作業的程序與其他目標 FCM 版本相同 (使用中的裝置數量低於特定門檻 (8.0 以下版本) 後,便被移除 門檻)。

已發布的 FCM 版本

如要查看已發布的 FCM 版本清單,請前往 hardware/interfaces/compatibility_matrices

如要尋找特定 Android 版本所發布的 FCM 版本,請參閱 Level.h