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 wAndroid.mknie są rejestrowane jako migawka dostawcy (moduły należące do SoC wAndroid.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ątkiemhardware/interfaceshardware/libhardwarehardware/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 wersji
BOARD_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.