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}
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:
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.