產生 VNDK 快照

VNDK 快照是一組用於 Android 版本的 VNDK-core 和 VNDK-SP 程式庫。 如果 system.img,您只能升級系統分區 包含版本伺服器所需的對應 VNDK 快照 vendor.img

官方 VNDK 快照會自動在 Android 建構伺服器上建立 並檢查到 Android 來源樹狀結構的 /prebuilts/vndk 中。適用對象 您可在本機建構 VNDK 快照。VNDK 快照是 支援 arm、arm64、x86 和 x86_64 TARGET_ARCH 變種版本。

建立快照

Android 建構伺服器產生建構構件和 VNDK 快照檔案 使用下列建構參數和建構指令。

建構參數

建構目標名稱為 vndk。建構目標設定 如下所示。

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH 與通用系統映像檔 (GSI) 相同 目標拱門 (armarm64x86x86_64)。
  • TARGET_ARCH_VARIANT。如果是快照 v28 (Android 9) 以上版本, 常見的設定方法如上所列。

建構指令

如要使用官方快照,Android 9 以上版本 包含範例目標 (vndk) 建構並輸出 VNDK 的 vndk.mk 快照轉換為 $DIST_DIR快照 ZIP 檔案採用下列格式 android-vndk-$(TARGET_ARCH).zip。 例如:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

Android 建構伺服器會使用 build.sh 指令碼,用於建構所有支援的架構 變種版本

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

Android 版本的 VNDK 快照是根據該版本的 發行分支。

在本機建構

在開發期間,您可以透過 以下指令。

  • 如要一次建構所有支援的 archs,請執行下列建構指令碼 (build.sh)。
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • 如要建構特定 TARGET_ARCH,請執行下列指令 指令
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

系統會建立對應的 android-vndk-$(TARGET_ARCH).zip 檔案 低於 $DIST_DIR

快照檔案

VNDK 快照包含下列檔案。

  • VNDK-core 和 VNDK-SP 共用程式庫的供應商變化版本。
    • 由於具有回溯相容性,因此不需要 LL-NDK 共用程式庫。
    • 針對 64 位元目標,同時包含 TARGET_ARCH 和 系統會建構並包含 TARGET_2ND_ARCH 程式庫。
  • VNDK-core、VNDK-SP、LL-NDK 和 VNDK-private Library 清單位於 [vndkcore|vndksp|llndk|vndkprivate].libraries.txt
  • 授權檔案。
  • module_paths.txt。記錄所有 VNDK 的模組路徑 如要檢查 GPL 專案是否具備來源,這是必要的程式庫 在特定 Android 原始碼中發布。

針對指定的 VNDK 快照 ZIP 檔案, android-vndk-$(TARGET_ARCH).zip,VNDK 預先建構程式庫 歸入名為 arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) (根據 ABI) 位元。例如,android-vndk-arm64.zip 的 64 位元程式庫 位於 arch-arm64-armv8-a 底下,32 位元程式庫則位於 放置在 arch-arm-armv8-a 底下。以下範例顯示 arm64 (TARGET_ARCH=arm64) VNDK 的目錄結構 快照 ZIP 檔案 (android-vndk-arm64.zip)。

VNDK 快照目錄結構
圖 1.VNDK 快照目錄結構 (範例)

建構供應商快照

Android 11 支援 供應商 快照可讓您建構vendor.img 原始碼樹狀結構中的 Android 版本預設的 VNDK 快照包含了 可安裝至裝置及.so 然後在執行階段中 從廠商 C++ 二進位檔連結為了擷取 您需要額外的構件,例如標頭檔案和

為了從本機來源產生這類構件 (以及 VNDK 快照) 請使用以下指令

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

這個指令會在以下位置建立 android-vndk-$(TARGET_ARCH).zip 個檔案: $DIST_DIR。以下範例是 arm64 VNDK 快照 ZIP 檔案 和建構構件粗體檔案是新增至一般 VNDK 的檔案 快照 (如圖 1 所示) 且包含 JSON 檔案 (此檔案儲存 每個程式庫的 cflags) 和所有匯出的標題檔案。

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

上傳 VNDK 快照

系統會檢查 VNDK 快照在原始碼下方的來源樹狀結構中 /prebuilts/vndk/vVER,其中 VER 等於 VNDK 快照的版本 (遵循對應 Android 版本的 SDK 版本)。適用對象 舉例來說,Android 8.1 VNDK 快照的版本是 27

使用 update.py 指令碼

update.py 指令碼 (/development/vndk/snapshot/update.py) 會自動執行 在原始碼樹狀結構中新增預先建構的 VNDK 快照。自動偵測 建構構件,並妥善填入 產生 Android.bp。這個指令碼會執行下列工作:

  1. /prebuilts/vndk/vVER 中,使用 repo start 建立新的 Git 分支版本。
  2. 擷取並解壓縮 VNDK 快照版本構件。
  3. 執行 gen_buildfiles.py 自動產生建構檔案 (Android.bp)。
  4. 執行 check_gpl_license.py 來驗證預先建構的程式庫 根據《通用公共授權 (GPL)》取得授權後,來源: 。
  5. 使用 git commit 提交新的變更。

使用本機建構的 VNDK 快照

您也可以使用本機建構的 VNDK 快照。--local 已指定選項,update.py 指令碼會擷取 VNDK 快照 從指定本機目錄 (而非 Android) 建構構件 建構伺服器),則具有 android-vndk-$(TARGET_ARCH).zip 檔案 從 development/vndk/snapshot/build.sh 產生。使用 --local 選項,update.py 指令碼會略過 GPL 授權檢查和 git commit 個步驟。

語法:

python update.py VER --local local_path

範例指令:使用本機版本更新 Android 8.1 VNDK 快照 /path/to/local/dir 中的構件:

python update.py 27 --local /path/to/local/dir

本機建構的 VNDK 快照的目錄結構範例:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
若是使用以下方式建構構件,則系統會自動新增本機建構構件 VNDK_SNAPSHOT_BUILD_ARTIFACTS=true

安裝 VNDK 快照

系統映像檔會使用 「BOARD_VNDK_VERSION」的相關資訊 PRODUCT_EXTRA_VNDK_VERSIONSro.vndk.version。 您可以控管要從預先建構的 VNDK 安裝哪些 VNDK 快照 快照目錄 (例如 /prebuilts/vndk/v29/prebuilts/vndk/v30),

  • 選項 1: BOARD_VNDK_VERSION。使用 用於建構目前供應商模組的快照模組,並只安裝 供應商模組所需的快照模組。
  • 選項 2: PRODUCT_EXTRA_VNDK_VERSIONS。 無論目前的供應商模組為何,請安裝 VNDK 快照模組。 這個指令會安裝 PRODUCT_EXTRA_VNDK_VERSIONS,但未連結至任何其他執行個體 同時建構各個模組

設定 BOARD_VNDK_VERSION

BOARD_VNDK_VERSION 顯示目前廠商的 VNDK 版本 所有必要模組都能建構如果 BOARD_VNDK_VERSION /prebuilts/vndk 目錄中可用的 VNDK 快照版本, 已安裝 BOARD_VNDK_VERSION 中指定的 VNDK 快照。如果 如果目錄中沒有 VNDK 快照,就會發生建構錯誤。

定義 BOARD_VNDK_VERSION 也能讓 VNDK 模組 已安裝。供應商模組連結,已定義在以下版本中定義的 VNDK 快照版本: BOARD_VNDK_VERSION 於建構期間 (這不是現行版本) 系統來源中的 VNDK 模組)。下載完整的來源樹狀結構時 系統和供應商來源均以相同的 Android 為基礎 版本。

設定 PRODUCT_EXTRA_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS 會列出要使用的額外 VNDK 版本 已安裝。通常只要為目前的 Pod 建立一個 VNDK 快照就夠了 供應商分區。不過,在某些情況下,您可能需要提供多個 複製到單一系統映像檔中例如,GSI 有多個快照 只需一個系統映像檔,就能支援多個供應商版本。透過設定 PRODUCT_EXTRA_VNDK_VERSIONS,您可以安裝 VNDK 快照 以及 BOARD_VNDK_VERSION 的 VNDK 版本。

如果 PRODUCT_EXTRA_VNDK_VERSIONS 有特定版本清單, 建構系統會尋找預先建構的 prebuilts/vndk 目錄內。如果建構系統找到 並將快照檔案安裝至每個 VNDK APEX (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER。 缺少版本會產生建構錯誤。

VNDK 模組在建構期間未與供應商模組連結,但可以 會在執行階段使用,如果供應商分區中的供應商模組需要 已安裝的 VNDK 版本。「PRODUCT_EXTRA_VNDK_VERSIONS」有效 只有在已定義 BOARD_VNDK_VERSION 的情況下。

PLATFORM_VNDK_VERSION 版

PLATFORM_VNDK_VERSION 定義目前 VNDK 的 VNDK 版本 部署在系統原始碼中的各個模組這個值會自動設定:

  • 在發布前,PLATFORM_VNDK_VERSION 會設為 PLATFORM_VERSION_CODENAME
  • 這個版本會將 PLATFORM_SDK_VERSION 複製到 PLATFORM_VNDK_VERSION

Android 版本發布後,目前的 VNDK 程式庫將 已安裝至 VNDK APEX (/system/apex/com.android.vndk.vVER),其中 VER 是儲存於 PLATFORM_VNDK_VERSION

BOARD_VNDK_VERSION 設為 current 時, PLATFORM_VNDK_VERSION 儲存在「ro.vndk.version」中。 否則 BOARD_VNDK_VERSION 會儲存在 ro.vndk.versionPLATFORM_VNDK_VERSION 已設為 Android 發布時的 SDK 版本; 程式碼名稱用於 PLATFORM_VNDK_VERSION

VNDK 版本設定摘要

下表摘要列出 VNDK 版本設定。

供應商
建構
主機
版本
SDK
版本
平台
版本
版本
屬性
安裝目錄
目前的 VNDK 模組 current 之前 CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
之後 SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
預先建構的快照模組 VNDK_VER
快照
之前/之後 CODE_NAME
SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • 「Board Version」 (BOARD_VNDK_VERSION)。越南盾 以及供應商模組建構所需的版本如果符合以下情況,請設為 current 供應商模組可以連結目前的系統模組。
  • 平台版本 (PLATFORM_VNDK_VERSION)。 目前系統模組正在建構的 VNDK 版本。只在 BOARD_VNDK_VERSION 等於目前值。
  • 版本屬性 (ro.vndk.version)。屬性 中,指定了 VNDK 版本的供應商.img 需要的二進位檔和程式庫 此程序的第一步 是將程式碼簽入執行所有單元測試的存放區中儲存在「vendor.img」,位置: /vendor/default.prop