VNDK-Snapshots können von einem System-Image verwendet werden, um den richtigen VNDK bereitzustellen für Anbieter-Images bereitstellen, auch wenn System- und Anbieter-Images verschiedenen Android-Versionen vergleichen. Zum Erstellen eines VNDK-Snapshots müssen VNDK-Bibliotheken als Snapshot zu speichern und mit einer Versionsnummer zu markieren. Die Das Bild des Anbieters ist möglicherweise mit einer bestimmten VNDK-Version verknüpft, die die erforderlichen ABIs bereitstellt für die Module im Anbieter-Image. Innerhalb derselben VNDK-Version müssen die VNDK-Bibliotheken ABI-stable
Das VNDK-Snapshot-Design enthält Methoden für wodurch die Vorab-Builds eines VNDK-Snapshots aus dem aktuellen System-Image Installation in die Systempartition einer neueren Android-Version hochladen.
VNDK-Bibliotheken
HIDL-HALs, die im Android 8.0 ermöglicht separate Upgrades für System- und Anbieterpartitionen. VNDK (VNDK) definiert Gruppen von Bibliotheken (VNDK-Core, VNDK-SP und LL-NDK), mit denen der Anbietercode eine Verknüpfung mit Bibliotheken herstellen, die nicht zu einem VNDK gehören, und die Anbieter daran hindern, diese zu verwenden. festgelegt. Das Anbieter-Image kann dann erstellt und ausgeführt werden, Sets aus dem System-Image werden für das Anbieter-Image bereitgestellt.
VNDK-Kern
Der VNDK-Kernbibliothekensatz wird installiert in
/system/lib[64]/vndk-${VER}
und ist verfügbar
nur für Anbieterprozesse mit der API-Ebene
${VER}
. Systemprozesse dürfen diese Bibliotheken nicht nutzen und müssen
verwenden Sie stattdessen die in /system/lib[64]
installierten Bibliotheken. Weil
der strikten Namespace-Einschränkung für jeden Prozess, sind die VNDK-Kernbibliotheken
vor doppeltem Laden geschützt sind.
Um eine Bibliothek in den VNDK-Core einzubinden, fügen Sie Folgendes zu
Android.bp
:
vendor_available: true, vndk: { enabled: true, },
VNDK-SP
VNDK-SP-Bibliotheken werden in /system/lib[64]/vndk-sp-${VER}
installiert
und stehen für Zulieferunternehmen und Systemprozesse zur Verfügung (über den SP-HAL)
Bibliotheken, die in der Anbieterpartition installiert sind). VNDK-SP-Bibliotheken können
Dual-Loading.
Um eine Bibliothek in VNDK-SP aufzunehmen, fügen Sie Folgendes in Android.bp
ein:
vendor_available: true, vndk: { enabled: true, support_system_process: true, },
LL-NDK
LL-NDK-Bibliotheken werden in /system/lib[64]
installiert. Anbietermodule
können LL-NDK-Stub-Bibliotheken verwenden, um auf vorausgewählte LL-NDK-Symbole zuzugreifen
Bibliotheken. LL-NDK-Bibliotheken müssen abwärtskompatibel und ABI-stabil sein,
ermöglichen es alten Versionen von Anbietermodulen, neue Versionen von LL-NDK-Bibliotheken zu verwenden.
Aufgrund der ABI-stabilen Eigenschaften des LL-NDK ist der VNDK-Snapshot
keine LL-NDK-Bibliotheken für alte Anbieter-Images einschließen müssen.
VNDK-Snapshots
Android 8.1 inklusive VNDK aus dem Quellcode erstellte Bibliotheken. Bei neueren Versionen des Android muss jede VNDK-Version als Snapshot erfasst und als bereits vorbereitet, um die Verknüpfung mit einem älteren Anbieter-Image zu ermöglichen.
Ab Android 9 werden neue Versionen
Fügen Sie mindestens einen Snapshot der VNDK-Core- und VNDK-SP-Verzeichnisse für ältere
Versionen im Android-Quellcode. Zum Zeitpunkt der Build-Erstellung sind
erforderliche Snapshots
installiert in /system/lib[64]/vndk-${VER}
und
/system/lib[64]/vndk-sp-${VER}
(Verzeichnisse, die von
Anbieterpartition), wobei ${VER}
die Stringvariable ist, die
steht für den Versionsnamen des VNDK-Snapshots.
Da die VNDK-Snapshot-Bibliotheken je nach VNDK-Version variieren können,
Der Snapshot enthält auch die Verknüpfungs-Namespace-Konfigurationen, installiert als
etc/ld.config.${VER}.txt
,
/etc/llndk.libraries.${VER}.txt
und
/etc/vndksp.libraries.${VER}.txt
Beispiel: Upgradesystem und Anbieter Bilder
Kein Snapshot erforderlich; ohne zusätzliche Konfigurationen für VNDK erstellen Snapshots.
Beispiel: Nur System-Image aktualisieren
Muss den VNDK-Snapshot und die Konfigurationsdateien des Verknüpfungs-Namespace für enthalten
das Anbieter-Image
im System-Image. Die Konfigurationsdateien für den Verknüpfungs-Namespace
sind automatisch für die Suche nach VNDK-Bibliotheken in
/system/lib[64]/vndk-${VER}
und
/system/lib[64]/vndk-sp-${VER}
.
Beispiel: Upgrade des System-Images, geringfügige Änderung des Anbieter-Images
Das Erstellen eines Anbieter-Images anhand eines VNDK-Snapshots wird noch nicht unterstützt. Sie können muss das Anbieter-Image separat mit seinem ursprünglichen Quellcode erstellt werden. ein Upgrade des System-Images wie im vorherigen Beispiel beschrieben.
VNDK-Snapshot-Architektur
Um ein Android 9-System-Image mit einem Image des Android 8.1-Anbieters, der VNDK-Snapshot, der dem von Android 8.1 entspricht Mit dem Android 9-Betriebssystem muss ein Anbieterbild bereitgestellt werden. System-Image wie unten dargestellt:
Das VNDK-Snapshot-Design umfasst die folgenden Methoden:
- Snapshot für VNDK-Kern und VNDK-SP generieren
Bibliotheken. Android 9 enthält ein Skript,
kann verwendet werden, um einen Snapshot des aktuellen VNDK-Builds zu erstellen. In diesem Skript sind alle
Bibliotheken in
/system/lib[64]/vndk-28
und/system/lib[64]/vndk-sp-28
, die mit dem aktuellen Quelle als VNDK-Snapshot, wobei28
die VNDK-Version von Android 9 Der Snapshot enthält auch die Verknüpfung Namespace-Konfigurationsdateien/etc/ld.config.28.txt
/etc/llndk.libraries.28.txt
und/etc/vndksp.libraries.28.txt
Der generierte Snapshot wird verwendet, mit neueren Android-Versionen (höher als Android 9) - Die Installation vorgefertigter VNDK-Core- und VNDK-SP-Bibliotheken
Snapshot In Android 9 hat ein VNDK-Snapshot
eine Reihe vorgefertigter VNDK-Core-Bibliotheken und VNDK-SP-Bibliotheken sowie
als Verknüpfungs-Namespace-Konfigurationsdateien zurück. Wenn Sie eine Liste der VNDK bereitstellen
Snapshot-Versionen werden installiert. Beim Build wird das System-Image installiert.
die VNDK-Snapshot-Bibliotheken in
/system/lib[64]/vndk-${VER}
und/system/lib[64]/vndk-sp-${VER}
-Verzeichnisse und Verknüpfung Namespace-Konfigurationsdateien für diese VNDK-Snapshots/etc
.
VNDK-Versionsverwaltung
Jeder Android-Release hat nur einen VNDK-Snapshot und die SDK-Version wird als
eine VNDK-Version (die VNDK-Version hat eine Ganzzahl wie z. B. 27)
für Android 8.1). Die VNDK-Version ist behoben, wenn die Android-Version
veröffentlicht. Die von der Anbieterpartition verwendete VNDK-Version wird gespeichert
automatisch in der ro.vndk.version
-Property, die gelesen werden kann
zur Laufzeit. Diese Version wird dann verwendet, um die VNDK-Version des Anbieters zu identifizieren.
für einige Bibliotheken und Ermitteln der VNDK-Snapshot-Version für den Namespace
Konfiguration.
VNDK-Bibliotheken erstellen
Mit dem Befehl make vndk
werden Bibliotheken mit vndk:
{ enabled: true, … }
erstellt, einschließlich Abhängigkeiten und Namespace.
Konfigurationsdateien. Wenn BOARD_VNDK_VERSION := current
festgelegt ist,
Diese Bibliotheken werden mit dem Befehl make
erstellt.
Da bei diesem Build die VNDK-Bibliotheken aus dem Snapshot nicht installiert werden, Die installierten VNDK-Bibliotheken sind nicht ABI-stabil. Wenn jedoch eine Android-Version veröffentlicht wurde, wurde das ABI für die aktuelle VNDK-Version festgelegt. An dieser Stelle werden alle Bei ABI-Ausfällen handelt es sich um einen Build-Fehler. Patches für die Android-Version dürfen also nicht ABI für VNDK-Bibliotheken ändern.