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.
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 servidor registra una interfaz y le envía llamadas, y un proceso de cliente hace 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
AIDL usa el controlador de 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. Una vez que un subproceso de Binder recibe datos para una transacción, busca un objeto stub nativo en el proceso local, y 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.
Interactuar con los servicios del dispositivo
Android incluye algunos comandos para permitir la interacción con los servicios del dispositivo. Prueba lo siguiente:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing