In diesem Dokument wird das HIDL-Schnittstellen-Hashing beschrieben, ein Mechanismus, unbeabsichtigte Änderungen der Benutzeroberfläche vornehmen und sicherstellen, dass Änderungen der Benutzeroberfläche gründlich überprüft werden. Dieser Mechanismus ist erforderlich, da HIDL-Schnittstellen versioniert sind, was bedeutet, dass eine Schnittstelle nach der Veröffentlichung nicht mehr geändert werden darf, außer in einem Anwendung binary Interface (ABI) erhalten (z. B. in einem Kommentar Korrektur)
Layout
Jedes Paketstammverzeichnis (d.h. die android.hardware
-Zuordnung zu
Zuordnung von hardware/interfaces
oder vendor.foo
zu
vendor/foo/hardware/interfaces
) muss ein
current.txt
-Datei, in der alle veröffentlichten HIDL-Schnittstellendateien aufgeführt sind.
# current.txt files support comments starting with a '#' character # this file, for instance, would be vendor/foo/hardware/interfaces/current.txt # Each line has a SHA-256 hash followed by the name of an interface. # They have been shortened in this doc for brevity but they are # 64 characters in length in an actual current.txt file. d4ed2f0e...995f9ec4 vendor.awesome.foo@1.0::IFoo # comments can also go here # types.hal files are also noted in current.txt files c84da9f5...f8ea2648 vendor.awesome.foo@1.0::types # Multiple hashes can be in the file for the same interface. This can be used # to note how ABI sustaining changes were made to the interface. # For instance, here is another hash for IFoo: # Fixes type where "FooCallback" was misspelled in comment on "FooStruct" 822998d7...74d63b8c vendor.awesome.foo@1.0::IFoo
Hinweis:Damit Sie besser im Auge behalten können, welche Hashes
wo HIDL current.txt
-Dateien von Google in verschiedene
Abschnitten: Der erste Abschnitt stammt in Android 8 veröffentlicht. zum nächsten Abschnitt
werden in Android 8 MR1 veröffentlicht. Wir empfehlen dringend die Verwendung eines
ähnliches Layout in der Datei current.txt
.
Hash mit „hidl-gen“
Sie können einer current.txt
-Datei manuell oder folgendermaßen einen Hash hinzufügen:
mit hidl-gen
. Das folgende Code-Snippet enthält Beispiele für
Befehle, mit denen Sie mit hidl-gen
Folgendes verwalten können:
current.txt
-Datei (Hashes wurden gekürzt):
hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::types
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::typeshidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfchidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types 07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallbackhidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0 >> vendor/awesome/hardware/interfaces/current.txt
Warnung:Ersetzen Sie nicht den Hashwert für
für die zuvor veröffentlichte Benutzeroberfläche. Wenn Sie eine solche Schnittstelle ändern, fügen Sie einen neuen Hashwert
am Ende der Datei current.txt
hinzu. Weitere Informationen finden Sie unter
ABI-Stabilität:
Jede von hidl-gen
generierte Schnittstellendefinitionsbibliothek
enthält Hashes, die durch Aufrufen von
IBase::getHashChain
. Wenn hidl-gen
ein
wird die Datei current.txt
im Stammverzeichnis des
das HAL-Paket, um zu sehen, ob der HAL geändert wurde:
- Wenn kein Hash für den HAL gefunden wird, gilt die Schnittstelle als nicht freigegeben (in Entwicklung) und die Kompilierung.
- Wenn Hashes gefunden werden, werden sie mit der aktuellen Schnittstelle abgeglichen:
<ph type="x-smartling-placeholder">
- </ph>
- Wenn die Schnittstelle mit dem Hash übereinstimmt, wird die Kompilierung fortgesetzt.
- Wenn die Schnittstelle nicht mit einem Hash übereinstimmt, wird die Kompilierung angehalten, da eine zuvor veröffentlichte Schnittstelle geändert wird.
- Für eine ABI-erhaltende Änderung (siehe
ABI-Stabilität), die Datei
current.txt
muss geändert werden, bevor die Kompilierung fortgesetzt werden kann. - Alle anderen Änderungen sollten in einem Neben- oder Hauptversions-Upgrade des .
- Für eine ABI-erhaltende Änderung (siehe
ABI-Stabilität), die Datei
ABI-Stabilität
Ein ABI enthält das Binärprogramm
Verknüpfungen/Aufrufkonventionen/usw. Wenn sich das ABI oder die API ändert,
funktioniert länger mit einer generischen system.img
, die mit
offiziellen Benutzeroberflächen.
Sicherstellen, dass Schnittstellen versioniert sind und ABI stabil ist aus verschiedenen Gründen wichtig:
- Es stellt sicher, dass Ihre Implementierung die Vendor Test Suite (VTS) bestehen kann, die bringt dich auf den besten Weg, exklusive Framework-OTAs zu erstellen.
- Als OEM können Sie ein Board Support Package (BSP) bereitstellen, einfach zu verwenden und konform sind.
- Es hilft Ihnen dabei, den Überblick darüber zu behalten, welche Oberflächen freigegeben werden können. Erwägen Sie
current.txt
ist eine Zuordnung eines Interfaces-Verzeichnisses, in dem Sie Folgendes sehen können: Verlauf und Status aller Schnittstellen, die in einem Stammpaket bereitgestellt werden.
Wenn Sie einen neuen Hash für eine Schnittstelle hinzufügen, die bereits einen Eintrag in
current.txt
, achten Sie darauf, nur die Hashes hinzuzufügen, die für
die die ABI-Stabilität aufrechterhalten. Überprüfen Sie die folgenden Arten von Änderungen:
Änderungen zugelassen |
|
---|---|
Änderungen nicht zulässig |
|