Conception d'instantané VNDK

Les instantanés VNDK peuvent être utilisés par une image système pour fournir le bon VNDK des bibliothèques aux images de fournisseurs, même lorsque les images du système et des fournisseurs sont créées à partir de différentes versions d'Android. La création d'un instantané VNDK nécessite une capture VNDK en tant qu'instantané et les marquer avec un numéro de version. La L'image du fournisseur peut être associée à une version de VNDK spécifique fournissant les ABI requises pour les modules de l'image du fournisseur. Cependant, dans la même version du VNDK, les bibliothèques VNDK doivent être ABI-stable :

La conception d'instantanés VNDK comprend des méthodes pour pour générer précompilations d'un instantané VNDK à partir de l'image système actuelle et installation ces bibliothèques prédéfinies vers la partition système d'une version plus récente d'Android.

À propos des bibliothèques VNDK

HIDL-HAL, introduit dans Android 8.0 permet des mises à niveau distinctes pour les partitions du système et du fournisseur. VNDK Définit les ensembles de bibliothèques (VNDK-core, VNDK-SP et LL-NDK) que le code du fournisseur peut sont liés et empêchent les fournisseurs d'utiliser des bibliothèques qui ne font pas partie d'un VNDK. défini. Par conséquent, l'image du fournisseur peut être créée et exécutée si le VNDK approprié de l'image système sont fournis à l'image du fournisseur.

VNDK cœurs

L'ensemble de bibliothèques VNDK-core est installé /system/lib[64]/vndk-${VER} et est disponible uniquement pour les processus fournisseurs dont le niveau d'API est égal à ${VER} Les processus système ne peuvent pas utiliser ces bibliothèques et doivent Utilisez plutôt les bibliothèques installées dans /system/lib[64]. En effet, de la restriction d'espace de noms stricte pour chaque processus, les bibliothèques VNDK-core sont à l'abri du double chargement.

Pour inclure une bibliothèque dans VNDK-core, ajoutez ce qui suit à Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

Les bibliothèques VNDK-SP sont installées dans /system/lib[64]/vndk-sp-${VER} et sont accessibles aux processus des fournisseurs et aux processus système (via le protocole SP-HAL). bibliothèques installées dans la partition des fournisseurs). Les bibliothèques VNDK-SP peuvent être double chargement.

Pour inclure une bibliothèque dans VNDK-SP, ajoutez le code suivant à Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

Les bibliothèques LL-NDK sont installées dans /system/lib[64]. Modules du fournisseur peuvent utiliser des bibliothèques de bouchons LL-NDK pour accéder aux symboles présélectionnés de LL-NDK bibliothèques. Les bibliothèques LL-NDK doivent être rétrocompatibles et stables en ABI pour permettre aux anciennes versions des modules des fournisseurs d'utiliser les nouvelles versions des bibliothèques LL-NDK. En raison des caractéristiques de stabilisation ABI de LL-NDK, l'instantané VNDK pas besoin d'inclure des bibliothèques LL-NDK pour les anciennes images des fournisseurs.

À propos des instantanés VNDK

Android 8.1 inclus VNDK les bibliothèques créées à partir du code source. Toutefois, pour les versions ultérieures de Android, chaque version du VNDK doit être capturée sous la forme d'un instantané et fournie sous forme de pour créer des liens vers une ancienne image de fournisseur.

À partir d'Android 9, les nouvelles versions d'Android incluez au moins un instantané des répertoires VNDK-core et VNDK-SP pour les anciens dans le code source Android. Au moment de la compilation, les instantanés requis seront installé dans /system/lib[64]/vndk-${VER} et /system/lib[64]/vndk-sp-${VER} (annuaires pouvant être utilisés par la partition du fournisseur), où ${VER} est la variable de chaîne qui représente le nom de version de l'instantané VNDK.

Étant donné que les bibliothèques d'instantanés VNDK peuvent être différentes pour chaque version du VNDK, le VNDK l'instantané inclut également les configurations de l'espace de noms de l'éditeur de liens, installées en tant que etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt /etc/vndksp.libraries.${VER}.txt

Exemple: Mettre à niveau le système et le fournisseur images

Aucun instantané requis. compiler sans configuration supplémentaire pour VNDK instantanés.

Exemple: Mettre à niveau l'image système uniquement

Doit inclure les fichiers de configuration de l'instantané VNDK et de l'espace de noms de l'éditeur de liens pour l'image du fournisseur dans l'image système. Fichiers de configuration de l'espace de noms de l'éditeur de liens sont automatiquement configurés pour rechercher des bibliothèques VNDK dans /system/lib[64]/vndk-${VER} et /system/lib[64]/vndk-sp-${VER}

Figure 1 : Mise à niveau du système uniquement

Exemple: mise à niveau de l'image système, modification mineure de l'image du fournisseur

Comme il n'est pas encore possible de créer une image de fournisseur pour un instantané VNDK, vous doit créer l'image du fournisseur séparément avec son code source d'origine, puis mettre à niveau l'image système comme décrit dans l'exemple précédent.

Architecture des instantanés VNDK

Pour rendre une image système Android 9 compatible avec un Image du fournisseur Android 8.1, l'instantané VNDK correspondant à la version Android 8.1 l'image du fournisseur doit être fournie avec Android 9 l'image système, comme indiqué ci-dessous:

Figure 2 : Architecture des instantanés VNDK

La conception de l'instantané VNDK comprend les méthodes suivantes:

  • Générer un instantané pour VNDK-core et VNDK-SP bibliothèques. Android 9 inclut un script que vous pour créer un instantané du build VNDK actuel. Ce script regroupe tous bibliothèques dans /system/lib[64]/vndk-28 et des /system/lib[64]/vndk-sp-28 créés avec la version actuelle source en tant qu'instantané VNDK, où 28 est la version VNDK de Android 9. L'instantané inclut aussi l'éditeur de liens les fichiers de configuration d'espace de noms /etc/ld.config.28.txt, /etc/llndk.libraries.28.txt /etc/vndksp.libraries.28.txt L'instantané généré sera utilisé avec des versions plus récentes d'Android (supérieures à Android 9).
  • L'installation de bibliothèques VNDK-core et VNDK-SP prédéfinies à partir d'un instantané. Sous Android 9, un instantané VNDK un ensemble de bibliothèques VNDK-core prédéfinies et un ensemble de bibliothèques VNDK-SP, ainsi que en tant que fichiers de configuration d'espace de noms Linker. Lorsque vous fournissez une liste de VNDK versions d'instantané à installer. Au moment de la compilation, l'image système s'installe les bibliothèques d'instantanés VNDK sur /system/lib[64]/vndk-${VER} et les répertoires et l'éditeur de liens /system/lib[64]/vndk-sp-${VER} des fichiers de configuration d'espace de noms pour ces instantanés VNDK /etc.

Gestion des versions VNDK

Chaque version d'Android ne comporte qu'un seul instantané VNDK, et la version du SDK est utilisée comme Une version du VNDK (ce qui signifie que la version du VNDK comporte un nombre entier, par exemple 27 pour Android 8.1). La version du VNDK est corrigée lorsque la version d'Android est sont libérées. La version du VNDK utilisée par la partition du fournisseur est stockée automatiquement dans la propriété ro.vndk.version, qui peut être lue lors de l'exécution. Cette version est ensuite utilisée pour identifier la version du VNDK du fournisseur. pour certaines bibliothèques et identifier la version de l'instantané VNDK pour l'espace de noms configuration.

Créer des bibliothèques VNDK

La commande make vndk crée des bibliothèques contenant des vndk: { enabled: true, … }, y compris les dépendances et les espaces de noms de configuration. Si BOARD_VNDK_VERSION := current est défini, ces bibliothèques sont créées avec la commande make.

Comme cette compilation n'installe pas les bibliothèques VNDK à partir de l'instantané, les bibliothèques VNDK installées ne sont pas stables en ABI. Toutefois, lorsqu'une version d'Android est publiée, l'ABI de la version actuelle de VNDK est corrigée. À ce stade, toute Une défaillance de l'ABI est une erreur de compilation. Les correctifs de la version d'Android ne doivent donc pas modifier l'ABI pour les bibliothèques VNDK.