L'outil de définition VNDK aide les fournisseurs à migrer leur arborescence source vers un Environnement Android 8.0 Cet outil analyse les fichiers binaires du système et du fournisseur résout ensuite les dépendances. D'après le graphique des dépendances du module, peut également détecter les violations des concepts VNDK et fournir informations/suggestions pour déplacer les modules entre les partitions. Si un système générique l'image (GSI) est spécifiée, l'outil de définition VNDK peut comparer votre système avec le GSI et déterminer les bibliothèques étendues.
Cette section présente trois commandes fréquemment utilisées pour la définition du VNDK outil:
vndk
Calculer VNDK_SP_LIBRARIES, VNDK_SP_EXT_LIBRARIES et EXTRA_VENDOR_LIBRARIES pour la solution de contournement du système de compilation dans Android 8.0 et plus élevée.check-dep
Vérifiez les dépendances du module non conformes modules fournisseurs vers les bibliothèques partagées du framework non éligibles.deps
Imprimer les dépendances entre les bibliothèques partagées et exécutables.
Pour en savoir plus sur l'utilisation des commandes avancées, consultez README.md dans le dépôt de l'outil de définition VNDK.
Vndk
La sous-commande vndk
charge les bibliothèques partagées et les exécutables
de la partition système et des partitions du fournisseur, puis résout le module
dépendances pour déterminer les bibliothèques qui doivent être copiées
/system/lib[64]/vndk-sp-${VER}
et /vendor/lib[64]
.
Les options de la sous-commande vndk
incluent:
Option | Description |
---|---|
--system |
Pointer vers un répertoire contenant les fichiers qui se trouvent sur le système partition. |
--vendor |
Pointer vers un répertoire contenant les fichiers qui se trouvent chez un fournisseur partition. |
--aosp-system |
Pointez vers un répertoire contenant les fichiers qui se trouvent dans le répertoire générique image système (GSI). |
--load-extra-deps |
Pointez vers un fichier décrivant les dépendances implicites, tel que
dlopen() |
Par exemple, pour calculer les ensembles de bibliothèques VNDK, exécutez la commande suivante :
Sous-commande vndk
:
./vndk_definition_tool.py vndk \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor \
--aosp-system ${ANDROID_PRODUCT_OUT}/../generic_arm64_ab/system\
--load-extra-deps dlopen.dep
Spécifiez des dépendances supplémentaires avec un format de fichier simple. Chaque ligne représente avec le fichier placé avant les deux-points, selon le fichier situé après le signe deux-points. Exemple :
/system/lib/libart.so: /system/lib/libart-compiler.so
Cette ligne indique à l'outil de définition VNDK que libart.so
dépend de libart-compiler.so
.
Destination de l'installation
L'outil de définition VNDK liste les bibliothèques et les répertoires d'installation correspondants pour les catégories suivantes:
Catégorie | Répertoire |
---|---|
vndk_sp | À installer dans /system/lib[64]/vndk-sp-${VER} |
ext_vndk_sp | À installer dans /vendor/lib[64]/vndk-sp |
autres_vendor_libs | À installer dans /vendor/lib[64] |
Modèles de système de compilation
Après avoir collecté les résultats de l'outil de définition VNDK, un fournisseur peut créer un
Android.mk
et renseignez VNDK_SP_LIBRARIES
,
VNDK_SP_EXT_LIBRARIES
et EXTRA_VENDOR_LIBRARIES
à
Automatiser le processus de copie des bibliothèques dans l'installation désignée
vers votre destination.
ifneq ($(filter $(YOUR_DEVICE_NAME),$(TARGET_DEVICE)),) VNDK_SP_LIBRARIES := ##_VNDK_SP_## VNDK_SP_EXT_LIBRARIES := ##_VNDK_SP_EXT_## EXTRA_VENDOR_LIBRARIES := ##_EXTRA_VENDOR_LIBS_## #------------------------------------------------------------------------------- # VNDK Modules #------------------------------------------------------------------------------- LOCAL_PATH := $(call my-dir) define define-vndk-lib include $$(CLEAR_VARS) LOCAL_MODULE := $1.$2 LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_PREBUILT_MODULE_FILE := $$(TARGET_OUT_INTERMEDIATE_LIBRARIES)/$1.so LOCAL_STRIP_MODULE := false LOCAL_MULTILIB := first LOCAL_MODULE_TAGS := optional LOCAL_INSTALLED_MODULE_STEM := $1.so LOCAL_MODULE_SUFFIX := .so LOCAL_MODULE_RELATIVE_PATH := $3 LOCAL_VENDOR_MODULE := $4 include $$(BUILD_PREBUILT) ifneq ($$(TARGET_2ND_ARCH),) ifneq ($$(TARGET_TRANSLATE_2ND_ARCH),true) include $$(CLEAR_VARS) LOCAL_MODULE := $1.$2 LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_PREBUILT_MODULE_FILE := $$($$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_INTERMEDIATE_LIBRARIES)/$1.so LOCAL_STRIP_MODULE := false LOCAL_MULTILIB := 32 LOCAL_MODULE_TAGS := optional LOCAL_INSTALLED_MODULE_STEM := $1.so LOCAL_MODULE_SUFFIX := .so LOCAL_MODULE_RELATIVE_PATH := $3 LOCAL_VENDOR_MODULE := $4 include $$(BUILD_PREBUILT) endif # TARGET_TRANSLATE_2ND_ARCH is not true endif # TARGET_2ND_ARCH is not empty endef $(foreach lib,$(VNDK_SP_LIBRARIES),\ $(eval $(call define-vndk-lib,$(lib),vndk-sp-gen,vndk-sp,))) $(foreach lib,$(VNDK_SP_EXT_LIBRARIES),\ $(eval $(call define-vndk-lib,$(lib),vndk-sp-ext-gen,vndk-sp,true))) $(foreach lib,$(EXTRA_VENDOR_LIBRARIES),\ $(eval $(call define-vndk-lib,$(lib),vndk-ext-gen,,true))) #------------------------------------------------------------------------------- # Phony Package #------------------------------------------------------------------------------- include $(CLEAR_VARS) LOCAL_MODULE := $(YOUR_DEVICE_NAME)-vndk LOCAL_MODULE_TAGS := optional LOCAL_REQUIRED_MODULES := \ $(addsuffix .vndk-sp-gen,$(VNDK_SP_LIBRARIES)) \ $(addsuffix .vndk-sp-ext-gen,$(VNDK_SP_EXT_LIBRARIES)) \ $(addsuffix .vndk-ext-gen,$(EXTRA_VENDOR_LIBRARIES)) include $(BUILD_PHONY_PACKAGE) endif # ifneq ($(filter $(YOUR_DEVICE_NAME),$(TARGET_DEVICE)),)
délai de vérification
La sous-commande check-dep
analyse les modules du fournisseur et vérifie leur
les dépendances. S'il détecte des cas de non-respect des règles, il affiche les éléments concernés
utilisations de bibliothèques et de symboles:
./vndk_definition_tool.py check-dep \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor \
--tag-file eligible-list.csv \
--module-info ${ANDROID_PRODUCT_OUT}/module-info.json \
1> check_dep.txt \
2> check_dep_err.txt
L'exemple de résultat suivant montre une dépendance non conforme à
libRS_internal.so
à libmediandk.so
:
/system/lib/libRS_internal.so MODULE_PATH: frameworks/rs /system/lib/libmediandk.so AImageReader_acquireNextImage AImageReader_delete AImageReader_getWindow AImageReader_new AImageReader_setImageListener
Les options de la sous-commande check-dep
incluent:
Option | Description |
---|---|
--tag-file |
Doit faire référence à un fichier de balise de bibliothèque éligible (décrit ci-dessous), qui est un Feuille de calcul fournie par Google décrivant les catégories de cadres partagés bibliothèques. |
--module-info |
Pointe vers le module-info.json généré par le build Android
du système d'exploitation. Il permet à l'outil de définition VNDK d'associer des modules binaires à la source.
du code source. |
Fichier de tag de bibliothèque éligible
Google fournit une feuille de calcul VNDK éligible (par exemple,
eligible-list.csv
) qui ajoute des balises aux bibliothèques partagées du framework qui
peuvent être utilisés par les modules du fournisseur:
Taguer | Description |
---|---|
LL-NDK | Des bibliothèques partagées avec des ABI/API stables pouvant être utilisées à la fois de framework et de fournisseur. |
LL-NDK-Privé | Dépendances privées des bibliothèques LL-NDK. Les modules du fournisseur ne doivent pas accéder directement ces bibliothèques. |
VNDK-SP | Dépendances des bibliothèques partagées du framework SP-HAL. |
VNDK-SP-Privé | Dépendances VNDK-SP auxquelles tous les fournisseurs ne peuvent pas accéder directement modules. |
VNDK | Bibliothèques partagées de framework mises à la disposition des modules des fournisseurs (sauf SP-HAL et SP-HAL-Dep). |
VNDK – Privé | Dépendances VNDK qui ne sont pas directement accessibles à tous les fournisseurs modules. |
FWK UNIQUEMENT | Bibliothèques partagées basées uniquement sur un framework, auxquelles le fournisseur ne doit pas avoir accès modules (ni directement, ni indirectement). |
FWK-UNIQUEMENT-RS | Bibliothèques partagées basées uniquement sur un framework, auxquelles le fournisseur ne doit pas avoir accès (sauf pour les RS). |
Le tableau suivant décrit les balises utilisées pour les bibliothèques partagées par les fournisseurs:
Taguer | Description |
---|---|
SP-HAL | Bibliothèques partagées pour l'implémentation HAL du même processus. |
Dép. SP-HAL | Dépendances de bibliothèques partagées des fournisseurs SP-HAL (également appelées dépendances SP-HAL) à l'exception de LL-NDK et VNDK-SP). |
VND UNIQUEMENT | Des bibliothèques partagées invisibles au niveau du framework qui ne doivent pas être accessibles modules du framework. Les bibliothèques VNDK étendues copiées sont marquées en tant que VND UNIQUEMENT. |
Relations entre les balises:
Figure 1 : Relations entre les balises
dépendances
Pour déboguer les dépendances de la bibliothèque, la sous-commande deps
affiche
les dépendances du module:
./vndk_definition_tool.py deps \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Le résultat se compose de plusieurs lignes. La ligne sans tabulation commence une nouvelle section. La ligne contenant un caractère de tabulation dépend de la longueur . Exemple :
/system/lib/ld-android.so /system/lib/libc.so /system/lib/libdl.so
Ce résultat montre que ld-android.so
n'a pas de dépendance
et libc.so
dépend de libdl.so
.
Lorsque vous spécifiez l'option --revert
, deps
affiche les utilisations des bibliothèques (inversé
dépendances):
./vndk_definition_tool.py deps \
--revert \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Exemple :
/system/lib/ld-android.so /system/lib/libdl.so
Ce résultat montre que ld-android.so
est utilisé par
libdl.so
, ou en d'autres termes, libdl.so
dépend de
ld-android.so
De plus, ce résultat montre que
libdl.so
est le seul utilisateur de ld-android.so
.
Lorsque vous spécifiez l'option --symbol
, deps
affiche les symboles utilisés:
./vndk_definition_tool.py deps \
--symbol \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Exemple :
/system/lib/libc.so /system/lib/libdl.so android_get_application_target_sdk_version dl_unwind_find_exidx dlclose dlerror dlopen dlsym
Ce résultat montre que libc.so
dépend de six fonctions exportées
de libdl.so
. Si les options --symbol
et
L'option --revert
est spécifiée, les symboles utilisés par l'utilisateur.
sont imprimées.