Android 11 obsługuje elementy arcydzieła VNDK oraz zrzuty dostawców, których można używać do kompilowania vendor.img
niezależnie od wersji Androida w drzewie źródłowym. Umożliwia to korzystanie z różnych wersji obrazów, np. obrazów starszego dostawcy i nowszego obrazu systemu.
Mieszane wersje obrazów nie są obsługiwane w przypadku:
Android.mk.
Soong generuje podsumowanie dostawcy, dlatego moduły zdefiniowane w narzędziuAndroid.mk
nie są rejestrowane jako podsumowanie dostawcy (zastrzeżone są też moduły zabezpieczeń SoC wAndroid.mk
).Dezynfektor. Snapshoty dostawcy i VNDK nie obsługują sanitizera, ponieważ warianty sanitizera muszą być kompilowane osobno.
Informacje o zrzutach dostawców
Migawka dostawcy to migawka należąca do OEM. Jest to zestaw wstępnie utworzonych modułów C++, które są instalowane w /vendor
, ale są zarządzane w AOSP. Bez uchwycenia migawki dostawcy z poprzedniej wersji Androida uaktualnienie do nowej wersji może uszkodzić partycję dostawcy, ponieważ moduły migawki dostawcy można usuwać lub zmieniać bez zgodności z interfejsem API bądź ABI.
Migawka dostawcy zawiera poniższe moduły w AOSP.
- Biblioteki udostępnione, statyczne i nagłówkowe z
vendor: true
lubvendor_available: true
- Biblioteki statyczne VNDK z
vendor_available: true
- Pliki wykonywalne i pliki obiektów z
vendor: true
lubvendor_available: true
Moduł znajdujący się w tych katalogach jest uznawany za kod sprzętowy należący do SoC i jest ignorowany.
device/
vendor/
hardware/
, z wyjątkiem:hardware/interfaces
hardware/libhardware
hardware/libhardware_legacy
Kody sprzętowe należące do SoC mogą się też znajdować w innych katalogach. Obecnie migawki dostawców nie obsługują takich konfiguracji.
Tworzenie zrzutów dostawcy
Utwórz migawkę dostawcy za pomocą tych poleceń.
. build/envsetup.sh
lunch target
m dist vendor-snapshot
Te polecenia tworzą plik vendor-$(TARGET_DEVICE).zip
w folderze $DIST_DIR
. Ten przykład pokazuje plik ZIP ze snapshotem 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_rc
i plikivintf_fragments
. - Katalog
configs
zawiera pliki.rc
i.xml
z flaginit_rc
ivintf_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 VER
To polecenie generuje /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp
.
Poniższy przykład przedstawia strukturę katalogu zrzutu 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 dostawcy
Za pomocą elementów obrazu VNDK i zrzutu dostawcy możesz tworzyć vendor.img
niezależnie od wersji Androida w drzewie źródłowym, co umożliwia tworzenie mieszanych wersji obrazów. Po zainstalowaniu snapshotu VNDK i snapshotu dostawcy ustaw parametr BOARD_VNDK_VERSION
na wersję dostawcy. Na przykład:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Gdy parametr BOARD_VNDK_VERSION
ma wartość inną niż current
, system kompilacji:
- Włącza moduły zrzutów VNDK i moduły zrzutów dostawcy w
BOARD_VNDK_VERSION
. Każdy moduł zrzutów zastępuje moduł źródłowy C++ o tej samej nazwie. - Ustawia
ro.vndk.version
naBOARD_VNDK_VERSION
. - Instaluje moduły zrzutu VNDK z
BOARD_VNDK_VERSION
dosystem_ext
.