Android 11 obsługuje artefakty kompilacji zrzutów VNDK
i zrzuty dostawców, których możesz używać do kompilowania vendor.img niezależnie od
wersji Androida w drzewie źródłowym. Umożliwia to używanie mieszanych wersji obrazów, np. starszego obrazu dostawcy i nowszego obrazu systemu.
Mieszane wersje obrazów nie są obsługiwane w tych przypadkach:
Android.mk.Ponieważ zrzut dostawcy jest generowany przez Soong, moduły zdefiniowane wAndroid.mknie są przechwytywane jako zrzut dostawcy (nie ma też gwarancji, że moduły zastrzeżone dla SoC wAndroid.mkbędą działać).Sanitizer. Zrzuty dostawców i VNDK nie obsługują narzędzia Sanitizer, ponieważ jego warianty trzeba kompilować osobno.
Informacje o zrzutach dostawców
Zrzut dostawcy jest zrzutem należącym do producenta OEM. Jest to zestaw wstępnie skompilowanych modułów C++ zainstalowanych w katalogu /vendor, ale utrzymywanych w AOSP. Jeśli nie przechwycisz zrzutu dostawcy z poprzedniej wersji Androida, przejście na nową wersję może spowodować uszkodzenie partycji dostawcy, ponieważ moduły zrzutu dostawcy można usunąć lub zmienić bez zachowania zgodności z interfejsem API lub ABI.
Zrzut dostawcy zawiera te moduły w AOSP:
- biblioteki udostępnione, statyczne i nagłówkowe z ustawieniem
vendor: truelubvendor_available: true; - statyczne biblioteki VNDK z ustawieniem
vendor_available: true; - pliki wykonywalne i obiekty z ustawieniem
vendor: truelubvendor_available: true.
Moduły w tych katalogach są traktowane jako 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 zrzuty dostawców nie obsługują takich konfiguracji.
Kompilowanie zrzutów dostawców
Aby skompilować zrzut dostawcy, użyj tych poleceń:
. build/envsetup.shlunch targetm dist vendor-snapshot
Te polecenia tworzą plik vendor-$(TARGET_DEVICE).zip w katalogu $DIST_DIR. Ten przykład pokazuje plik ZIP zrzutu 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, eksportowane 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 plik
/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp.
Ten przykład pokazuje strukturę katalogów 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)
Kompilowanie obrazów dostawców
Korzystając z artefaktów kompilacji zrzutów VNDK
i zrzutu dostawcy, możesz skompilować vendor.img niezależnie od wersji Androida w drzewie źródłowym, co umożliwia tworzenie mieszanych wersji obrazów. Po zainstalowaniu zrzutu VNDK i zrzutu dostawcy ustaw BOARD_VNDK_VERSION na wersję dostawcy. Przykład:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Gdy BOARD_VNDK_VERSION jest ustawiona na wartość inną niż current, system kompilacji:
- włącza moduły zrzutu VNDK i moduły zrzutu dostawcy w wersji
BOARD_VNDK_VERSION; każdy moduł zrzutu zastępuje moduł źródłowy C++ o tej samej nazwie; - ustawia
ro.vndk.versionnaBOARD_VNDK_VERSION; - instaluje moduły zrzutu VNDK w wersji
BOARD_VNDK_VERSIONw katalogusystem_ext.