ABI-Monitoring ausführen

Auf dieser Seite wird beschrieben, wie Sie ABI-Darstellungen des Android-Kernels erstellen und das ABI-Monitoring ausführen. Sie gilt für Android 16 und höher. Informationen zu niedrigeren Versionen finden Sie unter ABI-Monitor für frühere Kernelversionen.

Sehen Sie sich auch die Referenzdokumentation für Kleaf an: ABI-Monitoring unterstützen (GKI) und ABI-Monitoring unterstützen (Gerät).

Kernel und zugehörige ABI-Darstellung erstellen

Führen Sie nach dem Herunterladen der GKI-Quellen den folgenden Befehl aus, um den GKI-Kernel und die ABI-Artefakte zu erstellen:

tools/bazel run //common:kernel_aarch64_abi_dist

Mit diesem Befehl wird die aktuelle ABI-Darstellung erstellt und zusammen mit dem erstellten Kernel und den Modulen nach $DIST_DIR/abi.stg kopiert. Die Standardeinstellung für $DIST_DIR ist out_abi/kernel_aarch64_abi_dist/dist.

Sie können zusätzliche Argumente für die ABI-Tools am Ende des Befehls nach -- angeben. Wenn Sie beispielsweise das Ziel für ABI- und Build-Artefakte ändern möchten, können Sie die Option --destdir verwenden:

tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist

ABI-Unterschiede zwischen dem Build und einer Referenzdarstellung analysieren

Das //common:kernel_aarch64_abi_dist-Ziel, das im vorherigen Befehl ausgeführt wird, analysiert und meldet alle ABI-Unterschiede, die zwischen dem Build und der Referenzdarstellung unter common/gki/aarch64/abi.stg (definiert in BUILD.bazel) gefunden wurden. Diese Unterschiede werden am Ende des Builds ausgegeben, wie im folgenden Beispiel gezeigt:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

Der gedruckte Bericht stammt aus dem Build-Artefakt unter $DIST_DIR/abi_stgdiff/abi.report.short. Dort finden Sie auch Berichte in anderen Formaten.

Bei der Automatisierung sollte der Exit-Code des Build-Befehls verwendet werden. Dieser ist ungleich null, wenn Unterschiede gefunden werden.

Entwicklungsphasen-Branches, einschließlich android-mainline, haben keine Referenz-ABI-Darstellung. Andernfalls werden in //common:kernel_aarch64_abi_dist keine Unterschiede erkannt.

Referenz-ABI-Darstellung aktualisieren

Jede Änderung, die sich auf die Kernel-ABI auswirkt, z. B. eine Aktualisierung der Symbolliste, muss in der Referenz-ABI-Darstellung (common/gki/aarch64/abi.stg, definiert in BUILD.bazel) berücksichtigt werden. Führen Sie dazu den folgenden Befehl aus:

tools/bazel run //common:kernel_aarch64_abi_update

Dieser Befehl führt alle Schritte unter ABI-Unterschiede analysieren aus und aktualisiert zusätzlich die Referenzdarstellung in den Quellen. Das aktualisierte ABI kann dann im selben Commit wie die Änderung hochgeladen werden. Fügen Sie die ABI-Unterschiede aus dem Bericht in $DIST_DIR/abi_stgdiff/abi.report.short in die Commit-Nachricht ein.

ABI-Monitoring und Geräteziele

Das ABI-Monitoring muss nur für die Build-Ziele des Core-Kernels konfiguriert werden. Gemischte Build-Konfigurationen (mit der Definition von base_kernel), die direkt mit dem GKI-Kernel kompiliert werden, müssen nur Unterstützung für die Erfassung der Gerätesymbolliste hinzufügen. Die ABI-Definition sollte mit dem GKI-Build aktualisiert werden.

Weitere Informationen finden Sie in der Referenzdokumentation für Kleaf: ABI-Überwachung unterstützen (Gerät).

ABI-Monitor für frühere Kernelversionen (Android 15 und niedriger)

Bei früheren Kernelversionen unterscheiden sich die Anleitungen für ABI-Builds und ‑Monitoring wie folgt.

Android 15 und 14

Die Anleitung ist größtenteils dieselbe wie für Android 16, mit der Ausnahme, dass die Referenz-ABI-Darstellung common/android/abi_gki_aarch64.stg und $DIST_DIR standardmäßig auf out_abi/kernel_aarch64/dist festgelegt ist.

Android 13

Android 13 kann entweder mit Kleaf oder mit Legacy-Build-Skripts erstellt werden.

Für Kleaf sind die Anweisungen dieselben wie für Android 14, mit der Ausnahme, dass das ABI-Format XML ist und die Referenz-ABI-Darstellung common/android/abi_gki_aarch64.xml ist.

Für Legacy-Build-Skripts sind die Anweisungen dieselben wie für Android 12.

Android 12 und niedriger

Das ABI-Format ist XML und die Referenz-ABI-Darstellung ist common/android/abi_gki_aarch64.xml

Diese Kernel verwenden build.sh anstelle von Kleaf. Für die ABI-Überwachung sollten Sie build_abi.sh verwenden. Diese Funktion akzeptiert dieselben Umgebungsvariablen zum Anpassen des Builds wie build.sh. Beispiel:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Dadurch wird der Kernel erstellt und die ABI-Darstellung in das Unterverzeichnis OUT_DIR (standardmäßig out_abi) extrahiert. Dies entspricht dem Ziel //common:kernel_aarch64_abi_dist von Kleaf (siehe Kernel- und ABI-Artefakte erstellen).

Die Referenz-ABI-Darstellung wird in android/abi_gki_aarch64.xml gespeichert, wie durch die Variable ABI_DEFINITION in common/build.config.gki.aarch64 definiert.

Wenn Sie die Kernel-ABI-Darstellung aktualisieren müssen, ist es am einfachsten, die Optionen --update und --print-report zu verwenden:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

Mit --print-report werden die ABI-Unterschiede zwischen der Datei, wie sie vorhanden ist, und einem neu generierten ABI ausgegeben.

Mit der Option --update wird die Referenz-ABI-Darstellung überschrieben. Außerdem wird die Symbolliste aktualisiert, wenn BUILD_CONFIG für ein Gerät mit KMI_SYMBOL_LIST konfiguriert ist.