Android 11 支援 VNDK 快照建構構件和供應商快照,無論來源樹狀結構中的 Android 版本為何,您都可以使用這些構件建構 vendor.img
。這樣就能混用不同版本的映像檔,例如舊版供應商和新版系統映像檔。
下列項目不支援混合映像檔版本。
Android.mk.
因為 Soong 會產生供應商快照,所以Android.mk
中定義的模組不會擷取為供應商快照 (Android.mk
中的 SoC 專屬模組也不保證能運作)。牙刷消毒器。供應商和 VNDK 快照不支援清除器,因為清除器變體需要另外建構。
關於供應商快照
供應商快照是由原始設備製造商 (OEM) 擁有的快照。這是一組預先建構的 C++ 模組,安裝在 /vendor
中,但維護作業在 AOSP 上進行。如果沒有擷取先前 Android 版本的供應商快照,升級至新版 Android 可能會導致供應商分割區中斷,因為供應商快照模組可能會在沒有 API 或 ABI 相容性的情況下移除或變更。
供應商快照包含 AOSP 上的下列模組。
- 共用、靜態和標頭程式庫,附有
vendor: true
或vendor_available: true
- 具有
vendor_available: true
的 VNDK 靜態程式庫 - 含有
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/vVER/$(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 快照建構構件和供應商快照,即可建構 vendor.img
,不必理會來源樹狀結構中的 Android 版本,因此可以建立混合版本的映像檔。安裝 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
。