AIDL – Übersicht

Die Android Interface Definition Language (AIDL) ist ein Tool, mit dem Nutzer die IPC abstrahieren können. 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 kann beispielsweise verwendet werden, um eine SDK API in der Plattform zu implementieren. Die SDK API-Oberfläche enthält jedoch niemals 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 eine Beispiel-AIDL-Schnittstelle:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Ein Serverprozess registriert eine Schnittstelle und führt Aufrufe an sie aus. Ein Clientprozess ruft diese Schnittstellen auf. In vielen Fällen fungiert ein Prozess sowohl als Client als auch als Server, da er möglicherweise auf mehrere Schnittstellen verweist. Weitere Informationen zur AIDL-Sprache finden Sie unter AIDL-Sprache. Weitere Informationen zu den verschiedenen Laufzeiten, die für die Verwendung dieser Schnittstellen verfügbar sind, finden Sie unter AIDL-Backends. Diese Typdeklarationen ähneln genau einer Klassendeklaration in einer bestimmten Sprache, funktionieren aber prozessübergreifend.

Funktionsweise

AIDL verwendet den Binder-Kernel-Treiber für Aufrufe. Wenn Sie einen Aufruf ausführen, werden eine Methoden-ID und alle Objekte in einen Puffer verpackt und in einen Remote-Prozess kopiert, in dem ein Binder-Thread darauf wartet, die Daten zu lesen. Sobald ein Binder-Thread Daten für eine Transaktion empfängt, sucht er im lokalen Prozess nach einem nativen Stub-Objekt. Diese Klasse entpackt die Daten und ruft ein lokales Interface-Objekt auf. 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