Présentation de l'AIDL,Présentation de l'AIDL

Le langage AIDL (Android Interface Definition Language) est un outil qui permet aux utilisateurs de faire abstraction de l'IPC. Étant donné une interface (spécifiée dans un fichier .aidl ), divers systèmes de construction utilisent le binaire aidl pour construire des liaisons C++ ou Java afin que cette interface puisse être utilisée dans tous les processus, quel que soit le temps d'exécution ou le nombre de bits.

AIDL peut être utilisé entre n’importe quel processus sous Android : entre des composants de plate-forme ou entre des applications. Cependant, il n’est jamais utilisé comme API pour les applications. AIDL peut être utilisé pour implémenter une API SDK dans la plate-forme, par exemple, mais la surface de l'API SDK ne contient jamais directement d'API AIDL. Pour obtenir de la documentation sur l'utilisation directe d'AIDL entre applications, consultez la documentation des développeurs Android correspondante. Lorsque AIDL est utilisé entre des composants de plate-forme mis à jour séparément, tels que les APEX (à partir d'Android 10) ou les HAL (à partir d'Android 11), le système de gestion des versions connu sous le nom de Stable AIDL doit être utilisé.

Exemple

Voici un exemple d'interface AIDL :

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Un processus serveur enregistre une interface et lui sert des appels, et un processus client appelle ces interfaces. Dans de nombreux cas, un processus agit à la fois comme client et comme serveur puisqu'il peut référencer plusieurs interfaces. Pour plus de détails sur le langage AIDL, consultez Langage AIDL . Pour plus de détails sur les différents environnements d'exécution disponibles pour utiliser ces interfaces, consultez Backends AIDL . Ces déclarations de type sont exactement comme une déclaration de classe dans un langage donné, mais elles fonctionnent sur plusieurs processus.

Comment ça fonctionne

AIDL utilise le pilote du noyau du classeur pour effectuer des appels. Lorsque vous effectuez un appel, un identifiant de méthode et tous les objets sont regroupés dans un tampon et copiés sur un processus distant où un thread de liaison attend de lire les données. Une fois qu'un thread de liaison reçoit des données pour une transaction, le thread recherche un objet stub natif dans le processus local, et cette classe décompresse les données et effectue un appel sur un objet d'interface local. Cet objet d'interface locale est celui qu'un processus serveur crée et enregistre. Lorsque les appels sont effectués dans le même processus et dans le même backend, aucun objet proxy n'existe et les appels sont donc directs sans aucun emballage ni décompression.

Interagir avec les services sur l'appareil

Android est livré avec quelques commandes pour permettre d'interagir avec les services de l'appareil. Essayer:

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