Omówienie AIDL

AIDL (Android Interface Definition Language) to narzędzie, które umożliwia użytkownikom i abstrakcyjnej koncepcji 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żywana między dowolnym procesem na Androidzie: między komponentami platformy lub między aplikacjami. Nigdy nie jest on jednak używany jako interfejs API dla aplikacji. Może być używany protokół AIDL np. zaimplementować na platformie interfejs SDK API, ale platforma SDK API nigdy nie zawiera bezpośrednio interfejsów API AIDL. Dokumentacja na temat korzystania z AIDL bezpośrednio między aplikacjami, Deweloperzy aplikacji na Androida dokumentacji. Gdy między komponentami platformy, które są aktualizowane oddzielnie, między komponentami platformy używanymi przez AIDL, np. jako APEX (w Androidzie 10) lub HAL (od Androida 11). To system obsługi wersji znany jako Należy używać stabilnej wersji 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. Ten typ deklaracje przypominają deklarację klasy w danym języku, ale współdziałają z różnymi procesami.

Jak to działa

AIDL do wykonywania połączeń używa sterownika jądra binder. Podczas nawiązywania połączenia zobaczysz a wszystkie obiekty są spakowane do bufora i kopiowane do zdalnym procesem, w którym wątek Binder czeka na odczyt 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