VNDK-Snapshot-Design

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

Abbildung 1: Nur Upgrade für das System

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:

Abbildung 2: VNDK-Snapshot-Architektur

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, wobei 28 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.