Mit dem VNDK-Definitionstool können Anbieter ihre Quellstruktur in eine Android 8.0-Umgebung Dieses Tool scannt Binärdateien im System und beim Anbieter und löst dann Abhängigkeiten auf. Basierend auf dem Modulabhängigkeitsdiagramm kann das Tool auch Verstöße gegen VNDK-Konzepte erkennen und Informationen/Vorschläge zum Verschieben von Modulen zwischen Partitionen. Wenn ein generisches System Image (GSI) angegeben ist, kann das VNDK-Definitionstool Ihr System vergleichen, mit der GSI-Datei erstellen und die erweiterten Bibliotheken bestimmen.
In diesem Abschnitt werden drei häufig verwendete Befehle für die VNDK-Definition behandelt Tool:
vndk
Berechnen Sie VNDK_SP_LIBRARIES, VNDK_SP_EXT_LIBRARIES und EXTRA_VENDOR_LIBRARIES für die Build-System-Problemumgehung in Android 8.0 und höher liegen.check-dep
Prüfen Sie die unzulässigen Modulabhängigkeiten Anbietermodule zu nicht zulässigen gemeinsam genutzten Frameworks.deps
Drucken Sie die Abhängigkeiten zwischen den gemeinsam genutzten Bibliotheken und ausführbare Dateien.
Weitere Informationen zur erweiterten Befehlsnutzung finden Sie unter README.md im Repository des VNDK-Definitionstools.
VNDK
Mit dem Unterbefehl vndk
werden die gemeinsam genutzten Bibliotheken und ausführbare Dateien geladen
aus den Systempartitionen und Anbieterpartitionen
und löst das Modul auf,
um die Bibliotheken zu ermitteln, in die kopiert werden müssen,
/system/lib[64]/vndk-sp-${VER}
und /vendor/lib[64]
.
Zu den Optionen für den Unterbefehl vndk
gehören:
Option | Beschreibung |
---|---|
--system |
Auf ein Verzeichnis mit den Dateien verweisen, die sich im System befinden -Partition an. |
--vendor |
Verweisen Sie auf ein Verzeichnis mit den Dateien eines Anbieters. -Partition an. |
--aosp-system |
Verweisen Sie auf ein Verzeichnis mit den Dateien, die sich in der generischen System-Image (GSI). |
--load-extra-deps |
Bewegen Sie den Mauszeiger auf eine Datei, in der die impliziten Abhängigkeiten beschrieben werden, z. B.:
dlopen() |
Führen Sie beispielsweise folgenden Befehl aus, um die VNDK-Bibliothekssätze zu berechnen:
Unterbefehl 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
Zusätzliche Abhängigkeiten mit einem einfachen Dateiformat angeben. Jede Linie steht für eine Beziehung, wobei die Datei vor dem Doppelpunkt stehen muss, je nachdem, welche Datei nach dem Doppelpunkt. Beispiel:
/system/lib/libart.so: /system/lib/libart-compiler.so
Durch diese Zeile wird dem VNDK-Definitionstool mitgeteilt, dass libart.so
hängt von libart-compiler.so
ab.
Installationsziel
Das VNDK-Definitionstool listet Bibliotheken und entsprechende Installationsverzeichnisse auf. für die folgenden Kategorien:
Kategorie | Verzeichnis |
---|---|
Vndk_sp | Installation erforderlich in /system/lib[64]/vndk-sp-${VER} |
Vndk_sp_ext | Installation erforderlich in /vendor/lib[64]/vndk-sp |
extra_vendor_libs | Installation erforderlich in /vendor/lib[64] |
Systemvorlagen erstellen
Nachdem der Anbieter die Ergebnisse aus dem VNDK-Definitionstool erfasst hat, kann er ein
Android.mk
und füllen Sie VNDK_SP_LIBRARIES
aus.
VNDK_SP_EXT_LIBRARIES
und EXTRA_VENDOR_LIBRARIES
nach
den Prozess zum Kopieren von Bibliotheken in die vorgesehene Installation zu automatisieren
Ziel.
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)),)
Check-de
Der Unterbefehl check-dep
scannt Anbietermodule und prüft deren
Abhängigkeiten. Wenn Verstöße erkannt werden, wird die entsprechende Abhängigkeit ausgegeben.
Verwendung von Bibliotheken und Symbolen:
./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 gegen die Richtlinien verstoßende Abhängigkeit von
libRS_internal.so
in 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:
Option | Beschreibung |
---|---|
--tag-file |
Muss auf eine geeignete Bibliotheks-Tag-Datei verweisen (unten beschrieben), die ein Von Google bereitgestellte Tabelle, in der die Kategorien des Frameworks beschrieben sind Bibliotheken. |
--module-info |
Punkte auf die module-info.json , die vom Android-Build generiert wurden
System. Es hilft dem VNDK-Definitionstool, Binärmodule mit Quelle zu verknüpfen.
Code. |
Zulässige Bibliotheks-Tag-Datei
Google stellt eine zulässige VNDK-Tabelle (z.B.
eligible-list.csv
) enthalten, die die gemeinsam genutzten Framework-Bibliotheken mit Tags kennzeichnen,
können von Anbietermodulen verwendet werden:
Taggen | Beschreibung |
---|---|
LL-NDK | Gemeinsam genutzte Bibliotheken mit stabilen ABIs/APIs, die von beiden verwendet werden können Framework- und Anbietermodule. |
LL-NDK-Privat | Private Abhängigkeiten von LL-NDK-Bibliotheken. Anbietermodule dürfen nicht zugreifen direkt an diese Bibliotheken. |
VNDK-SP | Abhängigkeiten des SP-HAL-Frameworks für gemeinsam genutzte Bibliotheken. |
VNDK-SP-Privat | VNDK-SP-Abhängigkeiten, die nicht für alle Anbieter direkt zugänglich sind Module. |
VNDK (VNDK) | gemeinsam genutzte Framework-Bibliotheken, die für Anbietermodule verfügbar sind (außer SP-HAL und SP-HAL-Dep). |
VNDK privat | VNDK-Abhängigkeiten, die nicht für alle Anbieter direkt zugänglich sind Module. |
NUR FÜR FWK | Nur für Framework freigegebene gemeinsam genutzte Bibliotheken, auf die der Anbieter nicht zugreifen darf (weder direkt noch indirekt). |
FWK-ONLY-RS | Nur für Framework freigegebene gemeinsam genutzte Bibliotheken, auf die der Anbieter nicht zugreifen darf (außer für RS-Nutzung). |
In der folgenden Tabelle werden Tags beschrieben, die für gemeinsam genutzte Bibliotheken des Anbieters verwendet werden:
Taggen | Beschreibung |
---|---|
SP-HAL | Gemeinsam genutzte Bibliotheken für die HAL-Implementierung im selben Prozess. |
SP-HAL-Dep | Abhängigkeiten von SP-HAL-Anbietern von gemeinsam genutzten Bibliotheken (auch als SP-HAL-Abhängigkeiten bezeichnet) außer LL-NDK und VNDK-SP). |
NUR VND | Framework-unsichtbaren gemeinsam genutzten Bibliotheken, auf die nicht zugegriffen werden darf. Framework-Modulen. Die kopierten erweiterten VNDK-Bibliotheken sind getaggt als NUR VND. |
Beziehungen zwischen Tags:
Abbildung 1: Beziehungen zwischen Tags
Abfahrten
Zum Debuggen der Bibliotheksabhängigkeiten gibt der Unterbefehl deps
aus
die Modulabhängigkeiten:
./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 einen neuen Abschnitt beginnt. Die Zeile mit einem Tabulatorzeichen hängt vom vorhergehenden . 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
hängt von libdl.so
ab.
Bei Angabe der Option --revert
muss deps
Unterbefehl gibt die Nutzung von Bibliotheken aus (umgekehrte
Abhängigkeiten):
./vndk_definition_tool.py deps \
--revert \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
Beispiel:
/system/lib/ld-android.so /system/lib/libdl.so
Diese Ausgabe zeigt, dass ld-android.so
von
libdl.so
, oder mit anderen Worten, libdl.so
hängt von
ld-android.so
Darüber hinaus zeigt diese Ausgabe, dass
libdl.so
ist der einzige Nutzer von ld-android.so
.
Bei Angabe der Option --symbol
muss der deps
Unterbefehl gibt die verwendeten Symbole aus:
./vndk_definition_tool.py deps \
--symbol \
--system ${ANDROID_PRODUCT_OUT}/system \
--vendor ${ANDROID_PRODUCT_OUT}/vendor
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 sechs exportierten Funktionen abhängt
von libdl.so
. Wenn sowohl die Option --symbol
als auch
--revert
angegeben wurden, also die vom Nutzer verwendeten Symbole
gedruckt werden.