Generowanie zrzutów dostawców

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ędziu Android.mk nie są rejestrowane jako podsumowanie dostawcy (zastrzeżone są też moduły zabezpieczeń SoC w Android.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 lub vendor_available: true
  • Biblioteki statyczne VNDK z vendor_available: true
  • Pliki wykonywalne i pliki obiektów z vendor: true lub vendor_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 pliki vintf_fragments.
  • Katalog configs zawiera pliki .rc i .xml z flag init_rc i vintf_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 na BOARD_VNDK_VERSION.
  • Instaluje moduły zrzutu VNDK z BOARD_VNDK_VERSION do system_ext.