Generowanie zrzutów dostawców

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 w Android.mk nie są rejestrowane jako migawka dostawcy (moduły należące do SoC w Android.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 lub vendor_available: true
  • Statyczne biblioteki VNDK z vendor_available: true
  • Pliki wykonywalne i obiekty z rozszerzeniem vendor: true lub vendor_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ątkiem
    • hardware/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 pliki vintf_fragments.
  • Katalog configs zawiera pliki .rc.xml z flag init_rcvintf_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 wersjiBOARD_VNDK_VERSION. Każdy moduł migawki zastępuje moduł źródłowy C++ o tej samej nazwie.
  • Ustawia ro.vndk.version na BOARD_VNDK_VERSION.
  • Instaluje moduły zrzutu VNDK w zakresie od BOARD_VNDK_VERSION do system_ext.