AIDL – Übersicht

Die Android Interface Definition Language (AIDL) ist ein Tool, mit dem Nutzer IPC abstrahieren. Anhand einer Schnittstelle (angegeben in einem .aidl -Datei), verwenden verschiedene Build-Systeme die aidl-Binärdatei, um C++ oder Java zu erstellen. Bindungen, sodass diese Schnittstelle unabhängig von der Bitness oder Laufzeit.

AIDL kann für alle Prozesse in Android verwendet werden: zwischen Plattformkomponenten. oder zwischen Apps wechseln. Sie wird jedoch nie als API für Apps verwendet. AIDL wird möglicherweise verwendet um eine SDK API in der Plattform zu implementieren, aber die SDK API-Oberfläche enthält nie direkt AIDL APIs. Dokumentation zur Verwendung von AIDL zwischen Apps wechseln, siehe entsprechende Android-Entwickler Dokumentation. Wenn AIDL zwischen Plattformkomponenten verwendet wird, die separat aktualisiert werden, z. B. als APEXes (ab Android 10) oder HALs (ab Android 11), das Versionsverwaltungssystem, Stabile AIDL muss verwendet werden.

Beispiel

Hier ist ein Beispiel für eine AIDL-Schnittstelle:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Ein Serverprozess registriert eine Schnittstelle und stellt Aufrufe an sie. Ein Client Aufruf an diese Schnittstellen. In vielen Fällen fungiert ein Prozess sowohl als und einem Server, da er auf mehrere Schnittstellen verweist. Weitere Informationen Details zur AIDL-Sprache finden Sie unter AIDL-Sprache. Weitere Informationen zu den verschiedenen Laufzeiten, die zur Verwendung dieser Schnittstellen zur Verfügung stehen, finden Sie unter AIDL-Back-Ends. Diese Typen -Deklarationen ähneln einer Klassendeklaration in einer bestimmten Sprache, prozessübergreifend arbeiten.

Funktionsweise

AIDL verwendet den Binder-Kernel-Treiber für Aufrufe. Wenn Sie einen Anruf starten, Methodenkennung und alle Objekte werden in einen Puffer gepackt und in den einen Remoteprozess, bei dem ein Binder-Thread auf das Lesen der Daten wartet. Sobald ein Bindemittel Thread Daten für eine Transaktion empfängt, sucht der Thread nach einem nativen Stub-Objekt. im lokalen Prozess erfolgen. Diese Klasse entpackt die Daten und ruft eine Local-Interface-Objekt. Dieses lokale Schnittstellenobjekt ist das Objekt, das von einem Serverprozess verarbeitet wird. erstellt und registriert. Wenn Aufrufe im selben Prozess und im selben Prozess erfolgen keine Proxy-Objekte vorhanden sind, sodass Aufrufe direkt und ohne ein- oder auspacken.

Mit Diensten auf dem Gerät interagieren

Android verfügt über einige Befehle, die die Interaktion mit Diensten auf der . Hier sind ein paar Vorschläge:

    adb shell dumpsys --help # listing and dumping services
    adb shell service --help # sending commands to services for testing