Das VNDK-Definitionstool hilft Anbietern, ihren Quellbaum in eine Android 8.0-Umgebung zu migrieren. Dieses Tool scannt Binärdateien im System und Anbieter-Images und löst dann Abhängigkeiten auf. Basierend auf dem Modulabhängigkeitsdiagramm kann das Tool auch Verstöße gegen VNDK-Konzepte erkennen und Einblicke/Vorschläge zum Verschieben von Modulen zwischen Partitionen geben. Wenn ein generisches Systemabbild (GSI) angegeben ist, kann das VNDK-Definitionstool Ihr Systemabbild mit dem GSI vergleichen und die erweiterten Bibliotheken bestimmen.
Dieser Abschnitt behandelt drei häufig verwendete Befehle für das VNDK-Definitionstool:
-
vndk
. Berechnen Sie VNDK_SP_LIBRARIES, VNDK_SP_EXT_LIBRARIES und EXTRA_VENDOR_LIBRARIES für die Problemumgehung des Build-Systems in Android 8.0 und höher. -
check-dep
. Überprüfen Sie die verletzenden Modulabhängigkeiten von Herstellermodulen zu nicht berechtigten gemeinsam genutzten Framework-Bibliotheken. -
deps
. Drucken Sie die Abhängigkeiten zwischen den gemeinsam genutzten Bibliotheken und ausführbaren Dateien.
Weitere Einzelheiten zur erweiterten Befehlsverwendung finden Sie in der Datei README.md im Repository des VNDK-Definitionstools.
vndk
Der vndk
lädt die gemeinsam genutzten Bibliotheken und ausführbaren Dateien von der Systempartition und den Herstellerpartitionen und löst dann Modulabhängigkeiten auf, um die Bibliotheken zu bestimmen, die nach /system/lib[64]/vndk-sp-${VER}
und /vendor/lib[64]
kopiert werden müssen. /vendor/lib[64]
. Zu den Optionen für den vndk
gehören:
Möglichkeit | Beschreibung |
---|---|
--system | Zeigen Sie auf ein Verzeichnis, das die Dateien enthält, die sich in der Systempartition befinden werden. |
--vendor | Zeigen Sie auf ein Verzeichnis, das die Dateien enthält, die sich in einer Herstellerpartition befinden werden. |
--aosp-system | Zeigen Sie auf ein Verzeichnis, das die Dateien enthält, die sich im Generic System Image (GSI) befinden werden. |
--load-extra-deps | Zeigen Sie auf eine Datei, die die impliziten Abhängigkeiten beschreibt, z. B. dlopen() . |
Um beispielsweise die VNDK-Bibliothekssätze zu berechnen, führen Sie den folgenden vndk
Unterbefehl aus:
./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
Geben Sie zusätzliche Abhängigkeiten mit einem einfachen Dateiformat an. Jede Zeile stellt eine Beziehung dar, wobei die Datei vor dem Doppelpunkt von der Datei nach dem Doppelpunkt abhängt. Zum Beispiel:
/system/lib/libart.so: /system/lib/libart-compiler.so
Diese Zeile teilt dem VNDK-Definitionstool mit, dass libart.so
von libart-compiler.so
abhängt.
Installationsziel
Das VNDK-Definitionstool listet Bibliotheken und entsprechende Installationsverzeichnisse für die folgenden Kategorien auf:
Kategorie | Verzeichnis |
---|---|
vndk_sp | Muss in /system/lib[64]/vndk-sp-${VER} installiert werden |
vndk_sp_ext | Muss unter /vendor/lib[64]/vndk-sp installiert werden |
extra_vendor_libs | Muss nach /vendor/lib[64] installiert werden |
Erstellen Sie Systemvorlagen
Nach dem Sammeln von Ausgaben des VNDK-Definitionstools kann ein Anbieter eine Android.mk
-Datei erstellen und VNDK_SP_LIBRARIES
, VNDK_SP_EXT_LIBRARIES
und EXTRA_VENDOR_LIBRARIES
, um den Prozess zum Kopieren von Bibliotheken an das vorgesehene Installationsziel zu automatisieren.
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)),)
Scheckabh
Der Unterbefehl check-dep
scannt Herstellermodule und überprüft ihre Abhängigkeiten. Wenn es Verstöße erkennt, gibt es die verletzenden abhängigen Bibliotheks- und Symbolverwendungen aus:
./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
Die folgende Beispielausgabe zeigt beispielsweise eine verletzende Abhängigkeit von libRS_internal.so
zu 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
Zu den Optionen für den Unterbefehl check-dep
gehören:
Möglichkeit | Beschreibung |
---|---|
--tag-file | Muss auf eine berechtigte Bibliotheks-Tag-Datei (unten beschrieben) verweisen, bei der es sich um eine von Google bereitgestellte Tabelle handelt, in der Kategorien von gemeinsam genutzten Framework-Bibliotheken beschrieben werden. |
--module-info | Verweist auf die vom Android-Buildsystem generierte module-info.json . Es hilft dem VNDK-Definitionstool, Binärmodule mit Quellcode zu verknüpfen. |
Berechtigte Bibliotheks-Tag-Datei
Google stellt eine zulässige VNDK-Tabelle (z. B. eligible-list.csv
) bereit, die die gemeinsam genutzten Bibliotheken des Frameworks kennzeichnet, die von Anbietermodulen verwendet werden können:
Schild | Beschreibung |
---|---|
LL-NDK | Gemeinsam genutzte Bibliotheken mit stabilen ABIs/APIs, die sowohl von Framework- als auch von Herstellermodulen verwendet werden können. |
LL-NDK-Privat | Private Abhängigkeiten von LL-NDK-Bibliotheken. Herstellermodule dürfen nicht direkt auf diese Bibliotheken zugreifen. |
VNDK-SP | Abhängigkeiten von gemeinsam genutzten Bibliotheken des SP-HAL-Frameworks. |
VNDK-SP-Privat | VNDK-SP-Abhängigkeiten, auf die nicht alle Anbietermodule direkt zugreifen können. |
VNDK | Gemeinsam genutzte Framework-Bibliotheken, die für Herstellermodule verfügbar sind (außer SP-HAL und SP-HAL-Dep). |
VNDK-Privat | VNDK-Abhängigkeiten, auf die nicht alle Anbietermodule direkt zugreifen können. |
NUR FWK | Nur Framework-gemeinsam genutzte Bibliotheken, auf die nicht von Herstellermodulen zugegriffen werden darf (weder direkt noch indirekt). |
FWK-NUR-RS | Nur Framework-gemeinsam genutzte Bibliotheken, auf die nicht von Herstellermodulen zugegriffen werden darf (mit Ausnahme von RS-Nutzungen). |
Die folgende Tabelle beschreibt Tags, die für gemeinsam genutzte Bibliotheken von Anbietern verwendet werden:
Schild | Beschreibung |
---|---|
SP-HAL | Gemeinsam genutzte Bibliotheken für die HAL-Implementierung mit demselben Prozess. |
SP-HAL-Abt | Abhängigkeiten von gemeinsam genutzten Bibliotheken von SP-HAL-Anbietern (auch bekannt als SP-HAL-Abhängigkeiten mit Ausnahme von LL-NDK und VNDK-SP). |
NUR VND | Framework-unsichtbare gemeinsam genutzte Bibliotheken, auf die nicht von Framework-Modulen zugegriffen werden darf. Die kopierten erweiterten VNDK-Bibliotheken werden ebenfalls als VND-ONLY gekennzeichnet. |
Beziehungen zwischen Tags:

abhängig
Um die Bibliotheksabhängigkeiten zu debuggen, gibt der Unterbefehl deps die deps
:
./vndk_definition_tool.py deps \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Die Ausgabe besteht aus mehreren Zeilen. Die Zeile ohne Tabulatorzeichen beginnt einen neuen Abschnitt. Die Zeile mit einem Tabulatorzeichen hängt vom vorhergehenden Abschnitt ab. Zum Beispiel:
/system/lib/ld-android.so /system/lib/libc.so /system/lib/libdl.so
Diese Ausgabe zeigt, dass ld-android.so
keine Abhängigkeit hat und libc.so
von libdl.so
abhängt.
Wenn Sie die Option --revert
, gibt der Unterbefehl deps
die Verwendung von Bibliotheken (umgekehrte Abhängigkeiten) aus:
./vndk_definition_tool.py deps \
--revert \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Zum Beispiel:
/system/lib/ld-android.so /system/lib/libdl.so
Diese Ausgabe zeigt, dass ld-android.so
von libdl.so
verwendet wird, oder mit anderen Worten, libdl.so
hängt von ld-android.so
. Darüber hinaus zeigt diese Ausgabe, dass libdl.so
der einzige Benutzer von ld-android.so
ist.
Wenn Sie die Option --symbol
, gibt der deps
die verwendeten Symbole aus:
./vndk_definition_tool.py deps \
--symbol \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Zum Beispiel:
/system/lib/libc.so /system/lib/libdl.so android_get_application_target_sdk_version dl_unwind_find_exidx dlclose dlerror dlopen dlsym
Diese Ausgabe zeigt, dass libc.so
von 6 Funktionen abhängt, die aus libdl.so
exportiert wurden. Wenn sowohl die Option --symbol
als auch die Option --revert
angegeben sind, werden die vom Benutzer verwendeten Symbole gedruckt.