Descripción general de AIDL

El Lenguaje de definición de la interfaz de Android (AIDL) es una herramienta que permite a los usuarios abstraer el IPC. Dada una interfaz (especificada en un archivo .aidl), varios sistemas de compilación usan el binario aidl para construir vinculaciones de C++ o Java, de modo que esta interfaz se pueda usar en todos los procesos, independientemente del entorno de ejecución o la cantidad de bits.

AIDL se puede usar entre cualquier proceso en Android: entre componentes de la plataforma o entre apps. Sin embargo, nunca se usa como una API para apps. AIDL se puede usar implementar una API del SDK en la plataforma, por ejemplo, pero la plataforma de la API del SDK nunca contenga APIs de AIDL de forma directa. Si quieres obtener documentación sobre cómo usar AIDL entre apps directamente, consulta la documentación correspondiente para desarrolladores de Android. Cuando se usa el AIDL entre componentes de plataforma que se actualizan por separado, como como APEX (a partir de Android 10) o HAL (a partir del Android 11), el sistema de control de versiones conocido como Se debe usar un AIDL estable.

Ejemplo

Este es un ejemplo de interfaz de AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Un proceso de server registra una interfaz y entrega llamadas a ella, y un cliente realiza llamadas a esas interfaces. En muchos casos, un proceso actúa como cliente y servidor, ya que puede hacer referencia a varias interfaces. Para obtener más detalles sobre el lenguaje AIDL, consulta Lenguaje AIDL. Más información sobre los diversos entornos de ejecución disponibles para usar estas interfaces, consulta Backends de AIDL Estos tipos son exactamente como una declaración de clase en un lenguaje determinado, pero entre los procesos.

Cómo funciona

El AIDL usa el controlador del kernel de Binder para realizar llamadas. Cuando realizas una llamada, se muestra un identificador de método y todos los objetos se empaquetan en un búfer y se copian en es un proceso remoto en el que un subproceso de Binder espera para leer los datos. Cuando se crea Binder recibe datos de una transacción, el subproceso busca un objeto stub nativo en el proceso local. Esta clase descomprime los datos y realiza una llamada a un objeto de interfaz local. Este objeto de interfaz local es el que un proceso del servidor crea y registra. Cuando se realizan llamadas en el mismo proceso y el mismo backend, no existen objetos de proxy, por lo que las llamadas son directas sin empaquetar ni desempaquetar.

Cómo interactuar con los servicios en el dispositivo

Android incluye algunos comandos que permiten la interacción con los servicios en la dispositivo. Prueba lo siguiente:

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