Android 11 est compatible avec les artefacts de compilation d'instantanés VNDK et les instantanés du fournisseur, que vous pouvez utiliser pour créer vendor.img
quelle que soit la version d'Android dans l'arborescence source. Cela active des versions mixtes des images, telles qu'un fournisseur plus ancien et une image système plus récente.
Les versions d'images mixtes ne sont pas acceptées pour les éléments suivants.
Android.mk.
Étant donné que Soong génère l'instantané du fournisseur, les modules définis dansAndroid.mk
ne sont pas capturés en tant qu'instantané du fournisseur (le fonctionnement des modules propriétaires SoC dansAndroid.mk
n'est pas non plus garanti).Désinfectant. Les instantanés de fournisseur et de VNDK ne sont pas compatibles avec les désinfectants, car les variantes de désinfectant doivent être créées séparément.
À propos des instantanés de fournisseurs
Un instantané du fournisseur est un instantané appartenant à l'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 un instantané du fournisseur de la version précédente d'Android, 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 être compatibles avec l'API ou l'ABI.
Un instantané du fournisseur contient les modules suivants sur AOSP.
- Bibliothèques partagées, statiques et d'en-tête avec
vendor: true
ouvendor_available: true
- Bibliothèques statiques VNDK avec
vendor_available: true
- Fichiers exécutables et objets avec
vendor: true
ouvendor_available: true
Les modules situés dans les répertoires suivants sont considérés comme du code matériel appartenant au SoC et sont ignorés.
device/
vendor/
hardware/
, sauf pourhardware/interfaces
hardware/libhardware
hardware/libhardware_legacy
Les codes matériels appartenant au SoC peuvent également exister dans d'autres répertoires. Pour le moment, les instantanés du fournisseur ne sont pas compatibles avec ce type de configuration.
Créer des instantanés de fournisseurs
Créez un instantané du fournisseur à l'aide des commandes suivantes.
. build/envsetup.sh
lunch target
m dist vendor-snapshot
Ces commandes créent un fichier vendor-$(TARGET_DEVICE).zip
dans $DIST_DIR
. L'exemple suivant présente un fichier ZIP contenant un 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_rc
et les fichiersvintf_fragments
. - Le répertoire
configs
contient les fichiers.rc
et.xml
des indicateursinit_rc
etvintf_fragments
.
Installer des instantanés de fournisseurs
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 VER
Cette commande génère /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp
.
L'exemple suivant montre la structure de répertoires d'un instantané du 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 fournisseurs
À l'aide d'artefacts de compilation d'instantanés VNDK et d'un instantané du fournisseur, vous pouvez compiler 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é du 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és VNDK et les modules d'instantanés du fournisseur de
BOARD_VNDK_VERSION
. Chaque module d'instantané remplace un module source C++ portant le même nom. - Définit
ro.vndk.version
surBOARD_VNDK_VERSION
. - Installe les modules d'instantanés VNDK de
BOARD_VNDK_VERSION
àsystem_ext
.