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 wAndroid.mk
nie są przechwytywane jako migawka dostawcy (nie ma gwarancji, że moduły zastrzeżone dla SoC wAndroid.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
lubvendor_available: true
- Biblioteki statyczne VNDK z
vendor_available: true
- Pliki wykonywalne i pliki obiektowe z
vendor: true
lubvendor_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 plikivintf_fragments
. - Katalog
configs
zawiera pliki.rc
i.xml
z flagamiinit_rc
ivintf_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
naBOARD_VNDK_VERSION
. - Instaluje moduły migawek VNDK
BOARD_VNDK_VERSION
dosystem_ext
.