Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

生成供應商快照

Android 11支持VNDK快照構建構件和供應商快照,無論源樹上的Android版本如何,都可以使用它們來構建vendor.img 。這將啟用混合版本的映像,例如較舊的供應商和較新的系統映像。

混合圖像版本不支持以下。

  • Android.mk.由於Soong會生成供應商快照,因此不會將Android.mk中定義的模塊捕獲為供應商快照(也不保證Android.mk SoC專有模塊可以工作)。

  • 消毒液。供應商和VNDK快照不支持消毒劑,因為消毒劑變體需要單獨構建。

關於供應商快照

供應商快照是OEM擁有的快照。它是在/vendor安裝但在AOSP上維護的一組預構建C ++模塊。如果不捕獲以前的Android版本的供應商快照,則升級到新的Android版本可能會破壞供應商分區,因為可以在不具有API或ABI兼容性的情況下刪除或更改供應商快照模塊。

供應商快照在AOSP上包含以下模塊。

  • vendor: true共享的,靜態和標頭庫vendor: truevendor_available: true
  • 具有vendor_available: true VNDK靜態庫vendor_available: true
  • vendor: truevendor_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_rcvintf_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以外的值時,構建系統:

  • 使VNDK快照模塊和供應商快照的模塊BOARD_VNDK_VERSION 。每個快照模塊都會覆蓋具有相同名稱的C ++源模塊。
  • ro.vndk.versionBOARD_VNDK_VERSION
  • 安裝VNDK快照模塊BOARD_VNDK_VERSIONsystem_ext