Le langage de définition d'interface Android (AIDL) est un outil qui permet aux utilisateurs d'extraire l'IPC. Étant donné une interface (spécifiée dans un fichier .aidl
), divers systèmes de compilation utilisent le binaire aidl
pour créer des liaisons C++ ou Java afin que cette interface puisse être utilisée dans les processus, quel que soit l'environnement d'exécution ou la taille d'octet.
AIDL peut être utilisé entre n'importe quel processus Android: entre les composants de la plate-forme ou entre les applications. Toutefois, il n'est jamais utilisé comme API pour les applications. AIDL peut être utilisé pour implémenter une API de SDK dans la plate-forme, par exemple, mais la surface de l'API du SDK ne contient jamais directement d'API AIDL. Pour obtenir de la documentation sur l'utilisation d'AIDL directement entre les applications, consultez Développeurs Android documentation. Lorsqu'AIDL est utilisé entre des composants de plate-forme mis à jour séparément, tels que en tant qu'apex (à partir d'Android 10) ou HAL (à partir de Android 11), le système de gestion des versions Vous devez utiliser Stable AIDL.
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 y répond, tandis qu'un processus client appelle ces interfaces. Dans de nombreux cas, un processus agit à la fois en tant que client et en tant que serveur, car il peut faire référence à plusieurs interfaces. Pour en savoir plus sur le langage AIDL, consultez la section Langage AIDL. Pour en savoir plus sur les différents environnements d'exécution disponibles pour utiliser ces interfaces, consultez la section Backends AIDL. Ces types sont exactement comme une déclaration de classe dans une langue donnée, mais elles sur plusieurs processus.
Fonctionnement
AIDL utilise le pilote du kernel du liaisonneur pour passer des appels. Lorsque vous effectuez un appel, un identifiant de méthode et tous les objets sont empaquetés dans un tampon et copiés dans 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, il recherche un objet bouchon natif dans le processus local. Cette classe décompresse les données et effectue un appel sur un objet d'interface local. Cet objet d'interface locale est celui d'un processus crée et enregistre des registres. Lorsque les appels sont effectués au cours du même processus et de la même aucun objet proxy n'existe. Les appels sont donc directs, l'emballage ou le déballage.
Interagir avec les services sur l'appareil
Android est fourni avec quelques commandes permettant d'interagir avec les services de l'appareil. Conseil :
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing