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.0
、keymaster@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
開始開發:
- 將最新的「
compatibility_matrix.<F-1>.xml
」複製到compatibility_matrix.F.xml
。 - 將檔案中的
level
屬性更新為F
。 - 新增對應的建構規則,將這個相容性矩陣安裝到 裝置。
引入新的 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 版本 F
的 x.(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.xml
的 optional
設定如下:
- 僅搭載
x.0
版optional="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.xml
、
compatibility_matrix.1.xml
和
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>
將這個項目複製到「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 版本的程序僅止於此 包含下列步驟:
- 請確認
compatibility_matrix.F.xml
具有level="F"
屬性。 - 請確保所有裝置已建構並啟動。
- 更新 VTS 測試
確保裝置搭載最新的架構 (
在 Shipping API 級別) 使用目標 FCM 版本
V >= F
。 - 將檔案發布到 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.xml
、
compatibility_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.y
的max-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 版本就會從
下個單元將深入探討
活化函數等類神經網路此作業由下列兩個步驟完成:
從建構規則中移除
compatibility_matrix.V.xml
,使其不行 刪除安裝在系統映像檔上的任何程式碼,以及刪除 完全取決於已移除的功能從以下位置移除
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 版本。
- 它屬於公開的凍結相容性矩陣,但架構仍然是 支援。
例如:
health@1.0
HAL 已入場compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
、 和compatibility_matrix.2.xml
, 但不位於compatibility_matrix.3.xml
。因此在以下地區視為已淘汰: Android 9.- Power HAL 在 Android 中造成次要版本升級
9,但
power@1.0
仍是compatibility_matrix.3.xml
。 power@1.0
compatibility_matrix.legacy.xml
,您好:compatibility_matrix.1.xml
、 和compatibility_matrix.2.xml
。compatibility_matrix.3.xml
的值power@1.0-1
。
因此,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
。