Descripción general de AIDL

El Lenguaje de definición de la interfaz de Android (AIDL) es una herramienta que les permite a los usuarios abstraer IPC. Dada una interfaz (especificada en un .aidl ), varios sistemas de compilación usan el objeto binario aidl para construir C++ o Java. de modo que esta interfaz pueda usarse en todos los procesos, sin importar la el tiempo de ejecución o el valor de bits.

El 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. Para ver documentación sobre cómo usar el AIDL entre apps directamente; consulta las Desarrolladores de Android documentación. 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 servidor registra una interfaz y entrega llamadas a ella, y un cliente realiza llamadas a esas interfaces. En muchos casos, un proceso actúa como y un servidor, ya que puede hacer referencia a varias interfaces. Para ver más sobre el lenguaje del AIDL, consulta Idioma del 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 las llamadas se realizan en el mismo proceso y backend, no existen objetos de proxy, por lo que las llamadas son directas, embalar o 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