Omówienie AIDL

Android Interface Definition Language (ang. Android Interface Definition Language) to narzędzie, które umożliwia użytkownikom wyciągnięcie wniosków z analizy IPC. Biorąc pod uwagę interfejs (określony w pliku .aidl), różne systemy kompilacji używają pliku binarnego aidl do tworzenia powiązań w językach C++ lub Java, tak aby można było używać tego interfejsu w różnych procesach niezależnie od środowiska wykonawczego i szybkości transmisji.

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. AIDL może na przykład posłużyć do wdrożenia interfejsu SDK API na platformie, ale platforma SDK API nigdy nie zawiera bezpośrednio interfejsów API AIDL. Dokumentację dotyczącą bezpośredniego używania AIDL między aplikacjami znajdziesz w odpowiedniej dokumentacji dla deweloperów aplikacji na Androida. W przypadku korzystania z AIDL między komponentami platformy, które są aktualizowane oddzielnie, takimi jak APEX (od Androida 10) lub HAL (od Androida 11), należy używać systemu obsługi wersji znanego jako stabilna 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 go, a proces klienta wywołuje te interfejsy. W wielu przypadkach proces działa zarówno jako klient, jak i serwer, ponieważ może się odwoływać do wielu interfejsów. Więcej informacji o języku AIDL znajdziesz w sekcji Język AIDL. Więcej informacji o różnych środowiskach wykonawczych dostępnych do używania tych interfejsów znajdziesz w artykule o backendach AIDL. Deklaracje tego typu przypominają deklarację klas w danym języku, ale działają między różnymi procesami.

Jak to działa

AIDL do wykonywania połączeń używa sterownika jądra binder. Przy wywołaniu identyfikator metody i wszystkie obiekty są spakowane w buforze i kopiowane do procesu zdalnego, w którym wątek powiązania czeka na odczyt danych. Gdy wątek powiązania otrzyma dane dotyczące transakcji, wątek wyszukuje natywny obiekt namiętny w procesie lokalnym, a ta klasa rozpakowuje dane i wywołuje obiekt interfejsu lokalnego. Ten obiekt interfejsu lokalnego tworzy i rejestruje proces serwera. Gdy wywołania są wykonywane w tym samym procesie i na tym samym backendzie, nie istnieją żadne obiekty proxy, więc wywołania są bezpośrednie, bez konieczności pakowania czy rozpakowywania.

Korzystanie z usług na urządzeniu

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

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