Générer des instantanés de fournisseurs

Android 11 est compatible avec le build d'instantané VNDK artefacts et des instantanés de fournisseur, que vous pouvez utiliser pour créer vendor.img, quelle que soit Version d'Android dans l'arborescence source. Cela permet d'utiliser des versions mixtes d'images, comme 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. Comme Soong génère l'instantané du fournisseur, les modules définis dans Android.mk ne sont pas capturés en tant qu'instantané de fournisseur (modules propriétaires SoC dans Il n'est pas non plus garanti que Android.mk fonctionne.

  • Désinfectant. Les instantanés du fournisseur et du VNDK ne peuvent pas utiliser de désinfectant les variantes doivent être créées séparément.

À propos des instantanés de fournisseurs

Un instantané de fournisseur est un instantané appartenant à l'OEM. Il s'agit d'un ensemble de modules C++ prédéfinis installé dans /vendor, mais géré sur AOSP. Sans rechercher de fournisseur instantané de la version précédente d'Android, mise à jour vers une nouvelle version d'Android peut briser la partition des fournisseurs, car les modules d'instantanés de fournisseurs peuvent être supprimés sans être compatibles avec l'API ou l'ABI.

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

  • Bibliothèques partagées, statiques et d'en-têtes avec vendor: true ou vendor_available: true
  • Bibliothèques statiques VNDK avec vendor_available: true
  • Fichiers exécutables et d'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/, à l'exception de <ph type="x-smartling-placeholder">
      </ph>
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

Les codes de matériel appartenant au SoC peuvent également exister dans d’autres répertoires. À l'heure actuelle, les instantanés de fournisseur ne sont pas compatibles avec de telles configurations.

Créer des instantanés de fournisseurs

Créez un instantané de 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, init_rc fichiers et vintf_fragments fichiers.
  • Le répertoire configs contient les fichiers .rc et .xml des options init_rc. et vintf_fragments.

Installer des instantanés de fournisseurs

Pour installer un instantané de fournisseur, accédez au répertoire de destination et utilisez la 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é 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 fournisseurs

Utiliser le build d'instantané VNDK artefacts et un instantané de fournisseur, vous pouvez créer vendor.img, quel que soit le type dans l'arborescence source, ce qui permet de créer des versions mixtes images. Après avoir installé l'instantané VNDK et l'instantané du fournisseur, définissez BOARD_VNDK_VERSION à la version du fournisseur. Exemple :

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Lorsque BOARD_VNDK_VERSION est défini sur une valeur autre que current, la compilation système:

  • Active les modules d'instantanés VNDK et les modules d'instantanés de fournisseurs 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 dans system_ext.