اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
نظرة عامة على لغة تعريف واجهة نظام Android (AIDL)
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
لغة تعريف واجهة Android (AIDL) هي أداة تتيح للمستخدمين تجريد عملية الاتصال بين العمليات (IPC). عند توفّر واجهة (محدّدة في ملف .aidl
)، تستخدم أنظمة إنشاء مختلفة الملف الثنائي aidl
لإنشاء روابط C++ أو Java، ما يتيح استخدام هذه الواجهة في جميع العمليات، بغض النظر عن وقت التشغيل أو عدد البتات.
يمكن استخدام AIDL بين أي عملية في Android، سواء بين مكوّنات النظام الأساسي أو بين التطبيقات. ومع ذلك، لا يتم استخدامها أبدًا كواجهة برمجة تطبيقات للتطبيقات. يمكن استخدام AIDL
لتنفيذ واجهة برمجة تطبيقات حزمة SDK في النظام الأساسي، على سبيل المثال، ولكن لا يتضمّن سطح واجهة برمجة تطبيقات حزمة SDK
واجهات برمجة تطبيقات AIDL مباشرةً. للحصول على مستندات حول كيفية استخدام AIDL بين التطبيقات مباشرةً، يُرجى الاطّلاع على مستندات مطوّري تطبيقات Android ذات الصلة.
عند استخدام AIDL بين مكوّنات النظام الأساسي التي يتم تعديلها بشكل منفصل، مثل حِزم APEX (بدءًا من Android 10) أو طبقات HAL (بدءًا من Android 11)، يجب استخدام نظام تحديد الإصدار المعروف باسم Stable AIDL.
مثال
في ما يلي مثال على واجهة AIDL:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
تسجّل عملية الخادم واجهة وتنفّذ طلبات إليها، بينما تنفّذ عملية العميل طلبات إلى تلك الواجهات. في كثير من الحالات، يعمل أحد العمليات كعميل وخادم في الوقت نفسه، لأنّه قد يشير إلى واجهات متعددة. لمزيد من التفاصيل حول لغة AIDL، يُرجى الاطّلاع على لغة AIDL. لمزيد من التفاصيل حول بيئات التشغيل المختلفة المتاحة لاستخدام هذه الواجهات، راجِع برامج AIDL الخلفية. تتشابه تعريفات الأنواع هذه تمامًا مع تعريفات الفئات في لغة معيّنة، ولكنّها تعمل على مستوى العمليات.
آلية العمل
يستخدم AIDL برنامج تشغيل نواة binder لإجراء المكالمات. عند إجراء مكالمة، يتم تجميع معرّف الطريقة وجميع العناصر في مخزن مؤقت ونسخها إلى عملية بعيدة ينتظر فيها أحد سلاسل ربط البيانات قراءة البيانات. عندما يتلقّى أحد سلاسل ربط Binder بيانات خاصة بمعاملة، تبحث السلسلة عن عنصر جذع أصلي في العملية المحلية، ويقوم هذا الصف بفك حزمة البيانات وإجراء طلب على عنصر واجهة محلية. كائن الواجهة المحلية هذا هو الذي تنشئه عملية الخادم وتسجّله. عند إجراء المكالمات في العملية نفسها والخادم الخلفي نفسه، لا توجد عناصر وكيل، وبالتالي تكون المكالمات مباشرةً بدون أي عملية حزم أو فك حزم. لمزيد من المعلومات، اطّلِع على
نظرة عامة على Binder.
التفاعل مع الخدمات على الجهاز
يتضمّن نظام التشغيل Android بعض الأوامر التي تتيح التفاعل مع الخدمات على الجهاز. ننصحك بما يلي:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-30 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-30 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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"]]