VNDK 快照設計

系統映像檔可以使用 VNDK 快照提供正確的 VNDK 用於供應商映像檔的程式庫 不同的 Android 版本建立 VNDK 快照時必須擷取 VNDK 程式庫做為快照,並標示版本號碼。 供應商映像檔可能會連結至提供必要 ABI 的特定 VNDK 版本 模組中各個模組的具體類似不過,在相同的 VNDK 版本中 VNDK 程式庫必須採用 ABI-stable

VNDK 快照設計包括 產生 從目前的系統映像檔和預先建構的 VNDK 快照 正在安裝 預先建構的程式庫連結到較新版本 Android 的系統分區。

關於 VNDK 程式庫

HIDL-HAL,導入 Android 8.0 會分別啟用系統和供應商分區的升級功能。越南盾 定義供應商程式碼可顯示的程式庫組合 (VNDK-core、VNDK-SP 和 LL-NDK), 連結,封鎖供應商,不讓供應商使用不在 VNDK 中的程式庫 設定。因此,只要合適的 VNDK,就能建構並執行供應商映像檔 系統會將系統映像檔上的集合提供給廠商映像檔。

VNDK 核心

並安裝在 /system/lib[64]/vndk-${VER}且可供使用 用於 API 級別等於 的供應商程序 ${VER}。系統程序無法使用這些程式庫, 請改用 /system/lib[64] 中安裝的程式庫。由於 每個程序都限定的命名空間限制為 VNDK-core 程式庫 而非雙重載入

如要在 VNDK-core 中加入程式庫,請新增以下程式碼至 Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

越南盾

VNDK-SP 程式庫已安裝在 /system/lib[64]/vndk-sp-${VER} 並可透過 SP-HAL 使用 程式庫安裝在供應商分區中)。VNDK-SP 程式庫可能只提供 。

如要在 VNDK-SP 中加入程式庫,請在 Android.bp 中新增以下程式碼:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

LL-NDK 程式庫安裝在 /system/lib[64] 中。供應商模組 可以使用 LL-NDK 虛設程式庫存取 LL-NDK 的預先選取符號 程式庫LL-NDK 程式庫必須回溯相容,且 ABI 穩定版,才能 讓舊版供應商模組使用新版 LL-NDK 程式庫。 基於 LL-NDK 的 ABI 穩定特性,VNDK 快照 不需要為舊的廠商映像檔加入 LL-NDK 程式庫。

關於 VNDK 快照

Android 8.1 內含 VNDK 使用原始碼建構而成不過,如果是較新版本的 Android 中,每個 VNDK 版本都必須擷取為快照並提供 來連結舊版供應商映像檔。

從 Android 9 開始,新版 Android 至少包含一個 VNDK-core 和 VNDK-SP 目錄快照以適用於較舊的版本 。在建構期間,必要的快照會 已安裝至 /system/lib[64]/vndk-${VER}/system/lib[64]/vndk-sp-${VER} (可使用的目錄) 供應商分區),其中 ${VER} 是 代表 VNDK 快照的版本名稱。

由於各個 VNDK 版本的 VNDK 快照程式庫可能有所不同,因此 VNDK 採用 快照也包含連接器命名空間設定 etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt/etc/vndksp.libraries.${VER}.txt

範例:升級系統和廠商 圖片

不需要快照;無需額外設定 VNDK 的建構 快照

範例:只升級系統映像檔

必須包含 VNDK 快照和連接器命名空間設定檔 映像檔中的廠商映像檔連接器命名空間設定檔 會自動設定在以下位置搜尋 VNDK 程式庫: 「/system/lib[64]/vndk-${VER}」和 /system/lib[64]/vndk-sp-${VER}

圖 1.正在升級系統

示例:升級系統映像檔、微幅廠商映像檔變更

尚不支援根據 VNDK 快照建立供應商映像檔,因此您要 必須以原始原始碼另外建構供應商映像檔, 升級系統映像檔 (如上一個範例所示)。

VNDK 快照架構

如要讓 Android 9 系統映像檔與 Android 8.1 供應商映像檔,與 Android 8.1 相符的 VNDK 快照 供應商映像檔必須與 Android 9 一併提供 系統映像檔,如下所示:

圖 2.VNDK 快照架構

VNDK 快照設計包含下列方法:

  • 為 VNDK-core 和 VNDK-SP 產生快照 程式庫。Android 9 包含一個指令碼 可用來建立目前 VNDK 版本的快照。這個指令碼包含全部 /system/lib[64]/vndk-28/system/lib[64]/vndk-sp-28使用目前所用 來源為 VNDK 快照,其中 28 是 VNDK 版本的 Android 9.數據匯報也包含連結器 命名空間設定檔 /etc/ld.config.28.txt /etc/llndk.libraries.28.txt/etc/vndksp.libraries.28.txt。系統會使用產生的快照 使用較新的 Android 版本 (Android 9 以上版本)。
  • 從 快照。在 Android 9 中,VNDK 快照 一組預先建立的 VNDK 核心程式庫和一組 VNDK-SP 程式庫 做為連接器命名空間設定檔當您提供 VNDK 清單時 要安裝的快照版本、在建構期間安裝系統映像檔 連結至 /system/lib[64]/vndk-${VER} 的 VNDK 快照程式庫 /system/lib[64]/vndk-sp-${VER} 目錄和連接器 為這些 VNDK 快照建立命名空間設定檔 /etc 目錄內。

VNDK 版本管理

每個 Android 版本只有一個 VNDK 快照,且會使用 SDK 版本做為 VNDK 版本 (代表 VNDK 版本的整數,例如 27) Android 8.1 版)。VNDK 版本修正時,表示 Android 版本 已發布。系統會儲存供應商分區使用的 VNDK 版本 自動在 ro.vndk.version 屬性中讀取 執行任務接著,這個版本會用於識別供應商 VNDK 版本 ,並識別命名空間的 VNDK 快照版本 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定

建構 VNDK 程式庫

make vndk 指令會建構具有 vndk: { enabled: true, … } 的程式庫,包括依附元件和命名空間 設定檔如果已設定 BOARD_VNDK_VERSION := current, 這些程式庫是由 make 指令建構而成

這個版本不會從快照安裝 VNDK 程式庫,因此 已安裝的 VNDK 程式庫並非 ABI 穩定版。不過,Android 版本 時,最新 VNDK 版本的 ABI 已修正。目前 ABI 故障是建構錯誤,因此 Android 版本的修補程式不得 變更 VNDK 程式庫的 ABI。