Génération d'instantanés du fournisseur

Android 11 prend en charge les artefacts de création 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 des versions mixtes d'images, telles qu'une image d'un fournisseur plus ancien et une image système plus récente.

Les versions d'images mixtes ne sont pas prises en charge pour les éléments suivants.

  • Android.mk. Étant donné que Soong génère l'instantané du fournisseur, les modules définis dans Android.mk ne sont pas capturés en tant qu'instantané du fournisseur (les modules propriétaires SoC dans Android.mk ne sont pas non plus garantis de fonctionner).

  • Désinfectant. Les instantanés du fournisseur et du VNDK ne prennent pas en charge le désinfectant, car les variantes du désinfectant doivent être créées séparément.

À propos des instantanés du fournisseur

Un instantané de fournisseur est un instantané appartenant au fabricant OEM. Il s'agit d'un ensemble de modules C++ prédéfinis installés dans /vendor mais maintenus 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 briser la partition du fournisseur, car les modules d'instantané du fournisseur peuvent être supprimés ou modifiés sans compatibilité API ou ABI.

Un instantané du fournisseur contient les modules suivants sur AOSP.

  • Bibliothèques partagées, statiques et d'en-tête avec vendor: true ou vendor_available: true
  • Bibliothèques statiques VNDK avec vendor_available: true
  • Exécutables et fichiers objets avec vendor: true ou vendor_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/ , sauf pour
    • hardware/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 des fournisseurs ne prennent pas en charge de telles configurations.

Création d'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 ci-dessous 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_rc et les fichiers vintf_fragments .
  • Le répertoire configs contient les fichiers .rc et .xml des indicateurs init_rc et vintf_fragments .

Installation d'instantanés du fournisseur

Pour installer un instantané du 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/v VER /$(TARGET_ARCH)/Android.bp . L'exemple suivant montre la structure de répertoires 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éation d'images de fournisseurs

À l'aide des artefacts de création 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é du fournisseur, définissez BOARD_VNDK_VERSION sur la version du fournisseur. Par exemple:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Lorsque BOARD_VNDK_VERSION est défini sur une valeur autre que current , le système de build :

  • 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 sur BOARD_VNDK_VERSION .
  • Installe les modules d'instantanés VNDK de BOARD_VNDK_VERSION sur system_ext .