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żywany w dowolnym procesie na Androidzie: między komponentami platformy lub między aplikacjami. Nigdy 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. Dokumentację dotyczącą bezpośredniego używania AIDL między aplikacjami znajdziesz w odpowiedniej dokumentacji dla deweloperów aplikacji na 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 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 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 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. 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 umożliwiają 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