Panoramica AIDL

Android Interface Definition Language (AIDL) è uno strumento che consente agli utenti in modo da astrarre l'IPC. Data un'interfaccia (specificata in un .aidl ), vari sistemi di compilazione usano il file binario aidl per creare C++ o Java in modo che questa interfaccia possa essere utilizzata in più processi, indipendentemente o indebolimento.

AIDL può essere usato in qualsiasi processo in Android: tra i componenti della piattaforma o tra le app. Tuttavia, non viene mai utilizzata come API per le app. È possibile usare l'AIDL per implementare un'API SDK nella piattaforma, ad esempio, ma l'API SDK non contiene mai direttamente API AIDL. Per la documentazione su come utilizzare AIDL tra le app, vedi le corrispondenti Sviluppatori Android documentazione. Quando l'AIDL viene usato tra componenti della piattaforma che vengono aggiornati separatamente, ad esempio come APEX (a partire da Android 10) o HAL (a partire da Android 10) Android 11), il sistema di controllo delle versioni È necessario utilizzare il modello AIDL stabile.

Esempio

Ecco un esempio di interfaccia AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Un processo server registra un'interfaccia e invia le chiamate, mentre un client di archiviazione effettua chiamate a queste interfacce. In molti casi, un processo agisce sia come tra un client e un server, poiché potrebbe fare riferimento a più interfacce. Per ulteriori informazioni sul linguaggio AIDL, vedi linguaggio AIDL. Per maggiori dettagli sui vari runtime disponibili per utilizzare queste interfacce, vedi Backend AIDL. Questi tipi dichiarazioni sono esattamente come una dichiarazione di classe in una data lingua, il lavoro tra i vari processi.

Come funziona

AIDL utilizza il driver kernel binder per effettuare chiamate. Quando effettui una chiamata, di metodo e tutti gli oggetti vengono compressi in un buffer e copiati un processo remoto in cui un thread di binder attende di leggere i dati. Una volta creato, il thread riceve i dati per una transazione, il thread cerca un oggetto stub nativo nel processo locale. Questa classe scompone i dati ed effettua una chiamata encoder-decoder. L'oggetto dell'interfaccia locale è quello di un processo server crea e registra. Quando le chiamate vengono effettuate nello stesso processo e nello stesso backend, non esistono oggetti proxy e quindi le chiamate sono dirette senza di imballaggio o disimballaggio.

Interagire con i servizi sul dispositivo

Android è dotato di alcuni comandi che consentono di interagire con i servizi sul dispositivo. Prova:

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