Generowanie migawek dostawcy

System Android 11 obsługuje artefakty kompilacji migawek VNDK i migawki dostawców, których można używać do tworzenia vendor.img niezależnie od wersji systemu Android w drzewie źródłowym. Umożliwia to korzystanie z mieszanych wersji obrazów, takich jak obraz systemu starszego dostawcy i nowszy.

Wersje obrazów mieszanych nie są obsługiwane w następujących przypadkach.

  • Android.mk. Ponieważ Soong generuje migawkę dostawcy, moduły zdefiniowane w Android.mk nie są przechwytywane jako migawka dostawcy (nie ma gwarancji, że moduły zastrzeżone dla SoC w Android.mk również będą działać).

  • Środek dezynfekujący. Migawki dostawców i VNDK nie obsługują środka dezynfekującego, ponieważ warianty środka dezynfekującego muszą być tworzone osobno.

Informacje o migawkach dostawców

Migawka dostawcy to migawka należąca do producenta OEM. Jest to zestaw gotowych modułów C++ zainstalowanych w /vendor , ale utrzymywanych na platformie AOSP. Bez przechwycenia migawki dostawcy poprzedniej wersji systemu Android aktualizacja do nowej wersji systemu Android może spowodować uszkodzenie partycji dostawcy, ponieważ moduły migawki dostawcy można usunąć lub zmienić bez zgodności z interfejsami API lub ABI.

Migawka dostawcy zawiera następujące moduły w AOSP.

  • Biblioteki współdzielone, statyczne i nagłówkowe z vendor: true lub vendor_available: true
  • Biblioteki statyczne VNDK z vendor_available: true
  • Pliki wykonywalne i pliki obiektowe z vendor: true lub vendor_available: true

Moduły w poniższych katalogach są uważane za kod sprzętowy będący własnością SoC i są ignorowane.

  • device/
  • vendor/
  • hardware/ , z wyjątkiem
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

Kody sprzętowe będące własnością SoC mogą również znajdować się w innych katalogach. Obecnie migawki dostawców nie obsługują takich konfiguracji.

Tworzenie migawek dostawców

Utwórz migawkę dostawcy, korzystając z następujących poleceń.

. build/envsetup.sh
lunch target
m dist vendor-snapshot

Te polecenia tworzą plik vendor-$(TARGET_DEVICE).zip w $DIST_DIR . Poniższy przykład przedstawia plik ZIP migawki 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 flagami init_rc i vintf_fragments .

Instalowanie migawek dostawców

Aby zainstalować migawkę dostawcy, przejdź do katalogu docelowego i użyj następujących 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/v VER /$(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 migawek VNDK i migawki dostawcy, możesz zbudować vendor.img niezależnie od wersji Androida w drzewie źródłowym, co umożliwia tworzenie mieszanych wersji obrazów. Po zainstalowaniu migawki VNDK i migawki dostawcy ustaw BOARD_VNDK_VERSION na wersję dostawcy. Na 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 migawek VNDK i moduły migawek dostawców BOARD_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 migawek VNDK BOARD_VNDK_VERSION do system_ext .