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.mk
nie są rejestrowane jako migawka dostawcy (moduły należące do SoC wAndroid.mk
ró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: true
lubvendor_available: true
- Statyczne biblioteki VNDK z
vendor_available: true
- Pliki wykonywalne i obiekty z rozszerzeniem
vendor: true
lubvendor_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/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.sh
lunch target
m 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_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 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.version
naBOARD_VNDK_VERSION
. - Instaluje moduły zrzutu VNDK w zakresie od
BOARD_VNDK_VERSION
dosystem_ext
.