Przegląd AIDL, przegląd AIDL

Język definicji interfejsu systemu Android (AIDL) to narzędzie, które pozwala użytkownikom wyodrębnić IPC. Mając interfejs (określony w pliku .aidl ), różne systemy kompilacji używają pliku binarnego aidl do konstruowania powiązań C++ lub Java, dzięki czemu tego interfejsu można używać w różnych procesach, niezależnie od środowiska wykonawczego i bitowości.

AIDL może być używany pomiędzy dowolnymi procesami w systemie Android: pomiędzy komponentami platformy lub pomiędzy aplikacjami. Jednak nigdy nie jest używany jako interfejs API dla aplikacji. AIDL może być używany na przykład do implementacji interfejsu API SDK na platformie, ale powierzchnia API SDK nigdy nie zawiera bezpośrednio interfejsów API AIDL. Dokumentację dotyczącą bezpośredniego korzystania z AIDL między aplikacjami można znaleźć w odpowiedniej dokumentacji dla programistów Androida . Kiedy AIDL jest używany pomiędzy komponentami platformy, które są aktualizowane oddzielnie, takimi jak APEX (począwszy od Androida 10) lub HAL (począwszy od Androida 11), należy zastosować system wersjonowania znany jako Stable AIDL .

Przykład

Oto przykładowy interfejs AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Proces serwera rejestruje interfejs i obsługuje jego wywołania, natomiast proces klienta wykonuje wywołania tych interfejsów. W wielu przypadkach proces działa zarówno jako klient, jak i serwer, ponieważ może odwoływać się do wielu interfejsów. Aby uzyskać więcej informacji na temat języka AIDL, zobacz Język AIDL . Aby uzyskać więcej informacji na temat różnych środowisk wykonawczych dostępnych do korzystania z tych interfejsów, zobacz Backendy AIDL . Te deklaracje typów są dokładnie takie same jak deklaracje klas w danym języku, ale działają między procesami.

Jak to działa

AIDL używa sterownika jądra spoiwa do wykonywania wywołań. Kiedy wykonujesz wywołanie, identyfikator metody i wszystkie obiekty są pakowane do bufora i kopiowane do zdalnego procesu, gdzie wątek segregatora czeka na odczytanie danych. Gdy wątek segregatora odbierze dane dla transakcji, wątek wyszukuje natywny obiekt pośredniczący w procesie lokalnym, a ta klasa rozpakowuje dane i wywołuje lokalny obiekt interfejsu. Ten obiekt interfejsu lokalnego jest tym, który tworzy i rejestruje proces serwera. Gdy wywołania są wykonywane w tym samym procesie i na tym samym backendie, nie istnieją żadne obiekty proxy, dlatego wywołania są bezpośrednie, bez żadnego pakowania ani rozpakowywania.

Interakcja z usługami na urządzeniu

Android zawiera kilka poleceń umożliwiających interakcję z usługami na urządzeniu. Próbować:

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