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. 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ład interfejsu AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

Proces serwera rejestruje interfejs i wywołuje go, a proces klienta 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 o różnych środowiskach uruchomieniowych dostępnych do korzystania z tych interfejsów znajdziesz w artykule Usługa 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 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 wywołania są wykonywane w ramach tego samego procesu i tego samego backendu, nie istnieją żadne obiekty zastępcze, więc wywołania są bezpośrednie bez pakowania ani 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