O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Visão geral de AIDL

O Android Interface Definition Language (AIDL) é uma ferramenta que permite aos usuários abstrair IPC. Dada uma interface (especificado em um .aidl arquivo), vários sistemas de compilação usar o aidl binário para construir ligações C ++ ou Java para que esta interface pode ser usado em processos, independentemente da não execução ou bitness.

AIDL pode ser usado entre qualquer processo no Android: entre os componentes da plataforma ou entre aplicativos. No entanto, nunca é usado como uma API para aplicativos. AIDL pode ser usada para implementar uma API SDK na plataforma, por exemplo, mas a superfície da API SDK nunca contém APIs AIDL diretamente. Para documentação sobre como usar AIDL entre aplicativos diretamente, consulte correspondente Android documentação para desenvolvedores . Quando AIDL é utilizado entre os componentes da plataforma, que são actualizados separadamente, como vértices (começando em Android 10) ou HAL (começando em Android 11), o sistema de versão conhecida como AIDL estável deve ser utilizada.

Exemplo

Aqui está um exemplo de interface AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz); // synchronous method
        oneway void doFoo(int a); // async method
    }

Android 10 e superior oferecem suporte a declarações parcelable. Por exemplo:

    package my.package;

    import my.package.Boo;

    parcelable Baz {
        @utf8InCpp String name = "baz";
        Boo boo;
    }

O Android 11 e versões posteriores oferecem suporte a declarações de enum. Por exemplo:

    package my.package;

    enum Boo {
        A = 1 * 4,
        B = 3,
    }

O Android 12 e versões posteriores oferecem suporte a declarações sindicais. Por exemplo:

    package my.package;

    import my.package.FooSettings;
    import my.package.BarSettings;

    union Settings {
        FooSettings fooSettings;
        BarSettings barSettings;
        @utf8InCpp String str;
        int number;
    }

Android T (AOSP experimental) e superior oferecem suporte a declarações de tipo aninhado. Por exemplo:

    package my.package;

    import my.package.Baz;

    interface IFoo {
        void doFoo(Baz.Nested nested);  // defined my/package/Baz.aidl
        void doBar(Bar bar);            // defined below

        parcelable Bar { ... }          // union/enum types can be nested, while
                                        // an interface can't.
    }

Um processo servidor registra uma interface e serve chamadas a ele, e um processo cliente faz chamadas para essas interfaces. Em muitos casos, um processo atua como cliente e servidor, pois pode estar fazendo referência a várias interfaces. Para mais detalhes sobre os vários tempos de execução disponíveis para usar essas interfaces, consulte backends AIDL . Essas declarações de tipo são exatamente como uma declaração de classe em uma determinada linguagem, mas funcionam em processos.

Como funciona

AIDL usa o driver do kernel do fichário para fazer chamadas. Quando você faz uma chamada, um identificador de método e todos os objetos são empacotados em um buffer e copiados para um processo remoto onde um encadeamento de fichário espera para ler os dados. Depois que um encadeamento de fichário recebe dados para uma transação, o encadeamento procura um objeto stub nativo no processo local e essa classe descompacta os dados e faz uma chamada em um objeto de interface local. Este objeto de interface local é aquele que um processo do servidor cria e registra. Quando as chamadas são feitas no mesmo processo e no mesmo backend, não existe nenhum objeto proxy e, portanto, as chamadas são diretas sem qualquer compactação ou descompactação.

Interagindo com serviços no dispositivo

O Android vem com alguns comandos para permitir a interação com os serviços no dispositivo. Experimente:

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