Od 27 marca 2025 r. zalecamy używanie android-latest-release
zamiast aosp-main
do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Omówienie AIDL
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Android Interface Definition Language (AIDL) to narzędzie, które umożliwia użytkownikom abstrahowanie od IPC. Na podstawie interfejsu (określonego w .aidl
pliku) różne systemy kompilacji używają pliku binarnego aidl
do tworzenia powiązań w językach C++ lub Java, dzięki czemu interfejs ten może być używany w różnych procesach, niezależnie od środowiska wykonawczego czy liczby bitów.
AIDL można używać między dowolnymi procesami na Androidzie: między komponentami platformy lub między aplikacjami. Nie jest on jednak nigdy używany jako interfejs API dla aplikacji. AIDL może być używany np. do implementowania interfejsu API pakietu SDK na platformie, ale powierzchnia interfejsu API pakietu SDK nigdy nie zawiera bezpośrednio interfejsów API AIDL. Dokumentację dotyczącą bezpośredniego korzystania z AIDL w aplikacjach znajdziesz w odpowiedniej dokumentacji dla deweloperów Androida.
Gdy AIDL jest używany między komponentami platformy, które są aktualizowane oddzielnie, takimi jak APEX-y (od Androida 10) lub HAL-e (od Androida 11), musi być używany system wersji znany jako Stable 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 obsługuje wywołania do niego, a proces klienta wywołuje te interfejsy. W wielu przypadkach proces działa zarówno jako klient, jak i serwer, ponieważ może odwoływać się do wielu interfejsów. Więcej informacji o języku AIDL znajdziesz w artykule Język AIDL. Więcej informacji o różnych środowiskach wykonawczych, w których można używać tych interfejsów, znajdziesz w sekcji Backendy AIDL. Te deklaracje typu są dokładnie takie same jak deklaracje klas w danym języku, ale działają w różnych procesach.
Jak to działa
AIDL używa sterownika jądra bindera do wykonywania wywołań. Gdy wykonujesz połączenie, identyfikator metody i wszystkie obiekty są pakowane do bufora i kopiowane do procesu zdalnego, w którym wątek powiązania oczekuje na odczytanie danych. Gdy wątek interfejsu Binder otrzyma dane transakcji, wyszuka w procesie lokalnym natywny obiekt stub. Ta klasa rozpakowuje dane i wywołuje obiekt interfejsu lokalnego. Ten lokalny obiekt interfejsu jest tworzony i rejestrowany przez proces serwera. Gdy wywołania są wykonywane w tym samym procesie i na tym samym backendzie, nie ma obiektów proxy, więc wywołania są bezpośrednie i nie wymagają pakowania ani rozpakowywania. Więcej informacji znajdziesz w omówieniu Binder.
korzystać z usług na urządzeniu,
Android ma kilka poleceń, które umożliwiają interakcję z usługami na urządzeniu. Co możesz zrobić:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-30 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-30 UTC."],[],[],null,["# AIDL overview\n\nThe Android Interface Definition Language (AIDL) is a tool that lets users\nabstract away IPC. Given an interface (specified in a `.aidl`\nfile), various build systems use the `aidl` binary to construct C++ or Java\nbindings so that this interface can be used across processes, regardless of the\nruntime or bitness there.\n\nAIDL can be used between any process in Android: between platform components\nor between apps. However, it is never used as an API for apps. AIDL may be used\nto implement an SDK API in the platform, for example, but the SDK API surface\nnever contains AIDL APIs directly. For documentation about how to use AIDL\nbetween apps directly, see corresponding\n[Android developers\ndocumentation](https://developer.android.com/guide/components/aidl).\nWhen AIDL is used between platform components that are updated separately, such\nas APEXes (starting in Android 10) or HALs (starting in\nAndroid 11), the versioning system known as\n[Stable AIDL](/docs/core/architecture/aidl/stable-aidl) must be used.\n\nExample\n-------\n\nHere is an example AIDL interface: \n\n package my.package;\n\n import my.package.Baz; // defined elsewhere\n\n interface IFoo {\n void doFoo(Baz baz);\n }\n\nA *server* process registers an interface and serves calls to it, and a *client*\nprocess makes calls to those interfaces. In many cases, a process acts as both a\nclient and a server since it may be referencing multiple interfaces. For more\ndetails about the AIDL language, see\n[AIDL language](/docs/core/architecture/aidl/aidl-language). For more details\nabout the various runtimes available to use these interfaces, see\n[AIDL backends](/docs/core/architecture/aidl/aidl-backends). These type\ndeclarations are exactly like a class declaration in a given language, but they\nwork across processes.\n\nHow it works\n------------\n\nAIDL uses the binder kernel driver to make calls. When you make a call, a\nmethod identifier and all of the objects are packed onto a buffer and copied to\na remote process where a binder thread waits to read the data. Once a binder\nthread receives data for a transaction, the thread looks up a native stub object\nin the local process, and this class unpacks the data and makes a call on a\nlocal interface object. This local interface object is the one a server process\ncreates and registers. When calls are made in the same process and the same\nbackend, no proxy objects exist, and so calls are direct without any\npacking or unpacking. For further information, see the\n[Binder overview](/docs/core/architecture/ipc/binder-overview).\n\nInteract with services on the device\n------------------------------------\n\nAndroid comes with a few commands to allow interacting with services on the\ndevice. Try: \n\n adb shell dumpsys --help # listing and dumping services\n adb shell service --help # sending commands to services for testing"]]