Android 11 支援VNDK 快照建立工件和供應商快照,無論來源樹上的 Android 版本為何,您都可以使用它們來建立vendor.img
。這支援混合版本的映像,例如較舊的供應商和較新的系統映像。
以下版本不支援混合影像版本。
Android.mk.
由於 Soong 產生供應商快照,因此Android.mk
中定義的模組不會被擷取為供應商快照(Android.mk
中的 SoC 專有模組也不能保證正常運作)。消毒劑。供應商和 VNDK 快照不支援 sanitizer,因為需要單獨建立 sanitizer 變體。
關於供應商快照
供應商快照是 OEM 擁有的快照。它是一組安裝在/vendor
中但在 AOSP 上維護的預先建置 C++ 模組。如果不捕獲先前 Android 版本的供應商快照,升級到新的 Android 版本可能會破壞供應商分區,因為供應商快照模組可以在沒有 API 或 ABI 相容性的情況下刪除或變更。
供應商快照包含 AOSP 上的以下模組。
- 帶有
vendor: true
或vendor_available: true
- VNDK 靜態函式庫,
vendor_available: true
- 帶有
vendor: true
或vendor_available: true
的可執行檔和目標文件
以下目錄下的模組被視為 SoC 擁有的硬體程式碼並被忽略。
-
device/
-
vendor/
-
hardware/
,除了hardware/interfaces
-
hardware/libhardware
-
hardware/libhardware_legacy
SoC 擁有的硬體代碼也可能存在於其他目錄中。目前,供應商快照不支援此類配置。
建構供應商快照
使用以下命令建立供應商快照。
. build/envsetup.sh
lunch target
m dist vendor-snapshot
這些指令在$DIST_DIR
中建立一個vendor-$(TARGET_DEVICE).zip
檔。下面的範例顯示了供應商快照 ZIP 檔案。
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- JSON 檔案包含模組名稱、匯出目錄、
init_rc
檔案和vintf_fragments
檔案等標誌。 -
configs
目錄包含來自標誌init_rc
和vintf_fragments
的.rc
和.xml
檔。
安裝供應商快照
若要安裝供應商快照,請導覽至目標目錄並使用下列命令。
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VER
此指令產生/vendor/ vendor name /vendor_snapshot/v VER /$(TARGET_ARCH)/Android.bp
。以下範例顯示了供應商快照的目錄結構。
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
建構供應商圖像
使用VNDK 快照建立工件和供應商快照,無論來源樹上的 Android 版本為何,您都可以建立vendor.img
,從而可以建立混合版本的映像。安裝 VNDK 快照和供應商快照後,將BOARD_VNDK_VERSION
設定為供應商的版本。例如:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
當BOARD_VNDK_VERSION
設定為current
以外的值時,建構系統:
- 啟用
BOARD_VNDK_VERSION
的 VNDK 快照模組和供應商快照模組。每個快照模組都會覆蓋具有相同名稱的 C++ 來源模組。 - 將
ro.vndk.version
設定為BOARD_VNDK_VERSION
。 - 將
BOARD_VNDK_VERSION
的 VNDK 快照模組安裝到system_ext
。