Android 11 est compatible avec les artefacts de compilation d'instantanés VNDK
et les instantanés de fournisseur, que vous pouvez utiliser pour créer vendor.img quelle que soit la
version d'Android dans l'arborescence source. Cela permet d'utiliser des versions mixtes d'images, par exemple une image de fournisseur plus ancienne et une image système plus récente.
Les versions mixtes d'images ne sont pas compatibles avec les éléments suivants.
Android.mk.Étant donné que Soong génère l'instantané du fournisseur, les modules définis dansAndroid.mkne sont pas capturés en tant qu'instantané du fournisseur (les modules propriétaires du SoC dansAndroid.mkne sont pas non plus garantis de fonctionner).Sanitizer Les instantanés de fournisseur et VNDK ne sont pas compatibles avec Sanitizer, car les variantes de Sanitizer doivent être créées séparément.
À propos des instantanés de fournisseur
Un instantané de fournisseur est un instantané appartenant à un OEM. Il s'agit d'un ensemble de modules C++ précompilés installés dans /vendor, mais gérés sur AOSP. Sans capturer d'instantané de fournisseur de la version Android précédente, la mise à niveau vers une nouvelle version d'Android peut endommager la partition du fournisseur, car les modules d'instantané du fournisseur peuvent être supprimés ou modifiés sans compatibilité API ni ABI.
Un instantané de fournisseur contient les modules suivants sur AOSP.
- Bibliothèques partagées, statiques et d'en-tête avec
vendor: trueouvendor_available: true - Bibliothèques statiques VNDK avec
vendor_available: true - Exécutables et fichiers objet avec
vendor: trueouvendor_available: true
Les modules des répertoires suivants sont considérés comme du code matériel appartenant au SoC et sont ignorés.
device/vendor/hardware/, à l'exception dehardware/interfaceshardware/libhardwarehardware/libhardware_legacy
Les codes matériels appartenant au SoC peuvent également exister dans d'autres répertoires. Pour le moment, les instantanés de fournisseur ne sont pas compatibles avec ces configurations.
Créer des instantanés de fournisseur
Créez un instantané de fournisseur à l'aide des commandes suivantes.
. build/envsetup.shlunch targetm dist vendor-snapshot
Ces commandes créent un fichier vendor-$(TARGET_DEVICE).zip dans $DIST_DIR. L'exemple suivant montre un fichier ZIP d'instantané de fournisseur :
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
- Les fichiers JSON contiennent des indicateurs tels que le nom du module, les répertoires exportés, les fichiers
init_rcet les fichiersvintf_fragments. - Le répertoire
configscontient des fichiers.rcet.xmlà partir des indicateursinit_rcetvintf_fragments.
Installer des instantanés de fournisseur
Pour installer un instantané de fournisseur, accédez au répertoire de destination et utilisez les commandes suivantes.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VERCette commande génère
/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp.
L'exemple suivant montre la structure de répertoire d'un instantané de fournisseur :
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)
Créer des images de fournisseur
À l'aide des artefacts de compilation d'instantanés VNDK
et d'un instantané de fournisseur, vous pouvez créer vendor.img quelle que soit la version d'Android
dans l'arborescence source, ce qui permet de créer des versions mixtes d'
images. Après avoir installé l'instantané VNDK et l'instantané de fournisseur, définissez BOARD_VNDK_VERSION sur la version du fournisseur. Exemple :
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Lorsque BOARD_VNDK_VERSION est défini sur une valeur autre que current, le système de compilation :
- Active les modules d'instantané VNDK et les modules d'instantané de fournisseur de
BOARD_VNDK_VERSION. Chaque module d'instantané remplace un module source C++ portant le même nom. - Définit
ro.vndk.versionsurBOARD_VNDK_VERSION. - Installe les modules d'instantané VNDK de
BOARD_VNDK_VERSIONsursystem_ext.