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) 相同 目標拱門 (arm
、arm64
、x86
、x86_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
)。
建構供應商快照
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
。這個指令碼會執行下列工作:
- 在
/prebuilts/vndk/vVER
中,使用repo start
建立新的 Git 分支版本。 - 擷取並解壓縮 VNDK 快照版本構件。
- 執行
gen_buildfiles.py
自動產生建構檔案 (Android.bp
)。 - 執行
check_gpl_license.py
來驗證預先建構的程式庫 根據《通用公共授權 (GPL)》取得授權後,來源: 。 - 使用
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_VERSIONS
和ro.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.version
。PLATFORM_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
。