AIDL-Übersicht,AIDL-Übersicht

Die Android Interface Definition Language (AIDL) ist ein Tool, mit dem Benutzer IPC abstrahieren können. Bei gegebener Schnittstelle (angegeben in einer .aidl Datei) verwenden verschiedene Build-Systeme die aidl Binärdatei, um C++- oder Java-Bindungen zu erstellen, sodass diese Schnittstelle prozessübergreifend verwendet werden kann, unabhängig von der dortigen Laufzeit oder Bitzahl.

AIDL kann zwischen jedem Prozess in Android verwendet werden: zwischen Plattformkomponenten oder zwischen Apps. Es wird jedoch nie als API für Apps verwendet. AIDL kann beispielsweise zum Implementieren einer SDK-API in der Plattform verwendet werden, aber die SDK-API-Oberfläche enthält niemals AIDL-APIs direkt. Eine Dokumentation zur direkten Verwendung von AIDL zwischen Apps finden Sie in der entsprechenden Dokumentation für Android-Entwickler . Wenn AIDL zwischen Plattformkomponenten verwendet wird, die separat aktualisiert werden, wie z. B. APEXes (ab Android 10) oder HALs (ab Android 11), muss das als Stable AIDL bekannte Versionierungssystem 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 bedient sie, und 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 Einzelheiten zur AIDL-Sprache finden Sie unter AIDL-Sprache . Weitere Einzelheiten 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 jedoch prozessübergreifend.

Wie es funktioniert

AIDL verwendet den Binder-Kernel-Treiber zum Tätigen von Aufrufen. Wenn Sie einen Aufruf tätigen, werden ein Methodenbezeichner und alle Objekte in einen Puffer gepackt und in einen Remoteprozess kopiert, wo ein Binder-Thread darauf wartet, die Daten zu lesen. Sobald ein Binder-Thread Daten für eine Transaktion empfängt, sucht der Thread im lokalen Prozess nach einem nativen Stub-Objekt. Diese Klasse entpackt die Daten und ruft ein lokales Schnittstellenobjekt auf. Dieses lokale Schnittstellenobjekt ist das Objekt, das ein Serverprozess erstellt und registriert. Wenn Aufrufe im selben Prozess und im selben Backend erfolgen, sind keine Proxy-Objekte vorhanden, sodass Aufrufe direkt ohne Packen oder Entpacken erfolgen.

Interaktion mit Diensten auf dem Gerät

Android verfügt über einige Befehle, die die Interaktion mit Diensten auf dem Gerät ermöglichen. Versuchen:

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