Android 11 obsługuje artefakty kompilacji zrzutu VNDK i zrzuty dostawców, których możesz używać do tworzenia vendor.img niezależnie od wersji Androida w drzewie źródłowym. Umożliwia to mieszanie wersji obrazów, np. starszego obrazu dostawcy i nowszego obrazu systemu.
W przypadku tych funkcji nie są obsługiwane mieszane wersje obrazów:
- Android.mk.Ponieważ Soong generuje migawkę dostawcy, moduły zdefiniowane w- Android.mknie są rejestrowane jako migawka dostawcy (moduły należące do SoC w- Android.mkrównież nie są gwarantowane).
- Dezynfektor Migawki dostawcy i VNDK nie obsługują narzędzia Sanitizer, ponieważ warianty narzędzia Sanitizer muszą być kompilowane oddzielnie. 
Informacje o zrzutach dostawców
Zrzut dostawcy to zrzut należący do producenta OEM. Jest to zestaw wstępnie utworzonych modułów C++
zainstalowanych w /vendor, ale utrzymywanych w AOSP. Jeśli nie zrobisz migawki dostawcy poprzedniej wersji Androida, uaktualnienie do nowej wersji może spowodować uszkodzenie partycji dostawcy, ponieważ moduły migawki dostawcy można usunąć lub zmienić bez zachowania zgodności interfejsu API lub ABI.
Migawka dostawcy zawiera te moduły w AOSP:
- Biblioteki udostępnione, statyczne i nagłówkowe z vendor: truelubvendor_available: true
- Statyczne biblioteki VNDK z vendor_available: true
- Pliki wykonywalne i obiekty z rozszerzeniem vendor: truelubvendor_available: true
Moduły w tych katalogach są uznawane za kod sprzętowy należący do SoC i są ignorowane.
- device/
- vendor/
- hardware/, z wyjątkiem- hardware/interfaces
- hardware/libhardware
- hardware/libhardware_legacy
 
Kody sprzętowe należące do SoC mogą też znajdować się w innych katalogach. Obecnie migawki dostawców nie obsługują takich konfiguracji.
Tworzenie zrzutów dostawców
Utwórz migawkę dostawcy, używając tych poleceń.
. build/envsetup.shlunch targetm dist vendor-snapshot
Te polecenia tworzą plik vendor-$(TARGET_DEVICE).zip w folderze $DIST_DIR. Poniższy przykład pokazuje plik ZIP z informacjami o dostawcy:
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
- Pliki JSON zawierają flagi takie jak nazwa modułu, wyeksportowane katalogi, pliki init_rci plikivintf_fragments.
- Katalog configszawiera pliki.rci.xmlz flaginit_rcivintf_fragments.
Instalowanie zrzutów dostawców
Aby zainstalować zrzut dostawcy, przejdź do katalogu docelowego i użyj tych poleceń:
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VERTo polecenie generuje /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp.
Poniższy przykład pokazuje strukturę katalogów migawki dostawcy:
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)
Tworzenie obrazów dostawców
Korzystając z artefaktów kompilacji zrzutu VNDK i zrzutu dostawcy, możesz tworzyć vendor.img niezależnie od wersji Androida w drzewie źródłowym, co umożliwia tworzenie obrazów w mieszanych wersjach. Po zainstalowaniu migawki VNDK i migawki dostawcy ustaw wartość 
BOARD_VNDK_VERSION na wersję dostawcy. Na przykład:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Jeśli wartość BOARD_VNDK_VERSION jest inna niż current, system kompilacji:
- Umożliwia korzystanie z modułów zrzutów VNDK i modułów zrzutów dostawcy w wersjiBOARD_VNDK_VERSION. Każdy moduł migawki zastępuje moduł źródłowy C++ o tej samej nazwie.
- Ustawia ro.vndk.versionnaBOARD_VNDK_VERSION.
- Instaluje moduły zrzutu VNDK w zakresie od BOARD_VNDK_VERSIONdosystem_ext.
