Omówienie AIDL

Język definiowania interfejsu Androida (AIDL) to narzędzie, które pozwala użytkownikom abstrakcyjnie korzystać z interfejsu IPC. Przy użyciu interfejsu (określonego w polu .aidl ), różne systemy kompilacji używają pliku binarnego aidl do tworzenia języków w C++ lub Java tak aby można było używać tego interfejsu w różnych procesach, niezależnie od środowiska wykonawczego lub szybkość transmisji bitów.

AIDL może być używany w dowolnym procesie na Androidzie: między komponentami platformy lub między aplikacjami. Nie jest on jednak używany jako interfejs API dla aplikacji. Plik AIDL może służyć do implementacji interfejsu API pakietu SDK na platformie, ale interfejs API pakietu SDK nigdy nie zawiera bezpośrednio interfejsów AIDL. Informacje o używaniu interfejsu AIDL do bezpośredniej komunikacji między aplikacjami znajdziesz w odpowiedniej dokumentacji dla deweloperów Androida. Gdy interfejs AIDL jest używany między komponentami platformy aktualizowanymi oddzielnie, takimi jak APEX (od Androida 10) lub HAL (od Androida 11), należy używać systemu wersji znanego jako stabilny 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 wysyła do niego wywołania, a klient wywołuje te interfejsy. W wielu przypadkach proces jest jednocześnie klienta i serwera, ponieważ może on się odwoływać do wielu interfejsów. Więcej dotyczące języka AIDL, zobacz Język AIDL. Więcej informacji na temat różnych środowisk wykonawczych dostępnych do używania tych interfejsów, backendy AIDL. Te deklaracje typu są dokładnie takie same jak deklaracje klasy w danym języku, ale działają w różnych procesach.

Jak to działa

AIDL do wywoływania usług używa sterownika jądra binder. Gdy wykonasz wywołanie, identyfikator metody i wszystkie obiekty są umieszczane w buforze i kopiowane do procesu zdalnego, gdzie wątek binder czeka na odczytanie danych. Po utworzeniu segregatora wątek odbiera dane dotyczące transakcji, wątek wyszukuje natywny obiekt namiętny w procesie lokalnym, a te zajęcia rozpakowują dane i nawiązują lokalnego obiektu interfejsu. Ten obiekt interfejsu lokalnego jest obiektem przetwarzanym przez serwer tworzy i rejestruje. Gdy połączenia są wykonywane w ramach tego samego procesu nie ma żadnych obiektów proxy, więc wywołania są bezpośrednie, np. podczas pakowania czy rozpakowywania.

Korzystanie z usług na urządzeniu

Android ma kilka poleceń, które pozwalają na interakcję z usługami urządzenia. Spróbuj:

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