نمای کلی AIDL

«زبان تعریف واسط Android»‏ (AIDL) ابزاری است که به کاربران امکان می‌دهد «ارتباط بین‌پردازشی» را انتزاع کنند. با درنظر گرفتن یک میانای (مشخص‌شده در یک .aidl فایل)، سیستم‌های ساخت مختلف از باینری aidl برای ساختن پیوندهای C++ یا Java استفاده می‌کنند تا این میانای بتواند در سراسر فرایندها، صرف‌نظر از زمان اجرا یا بیت آن، استفاده شود.

از AIDL می‌توان بین هر فرایندی در Android استفاده کرد: بین مؤلفه‌های پلاتفرم یا بین برنامه‌ها. بااین‌حال، هرگز به‌عنوان API برای برنامه‌ها استفاده نمی‌شود. از AIDL می‌توان برای پیاده‌سازی API کیت توسعه نرم‌افزار در پلاتفرم استفاده کرد، برای مثال، اما سطح API کیت توسعه نرم‌افزار هرگز مستقیماً حاوی APIهای AIDL نیست. برای مستندات مربوط به نحوه استفاده از AIDL بین برنامه‌ها به‌طور مستقیم، به مستندات توسعه‌دهندگان Android مربوطه مراجعه کنید. وقتی از AIDL بین مؤلفه‌های پلاتفرمی استفاده می‌شود که به‌طور جداگانه به‌روز می‌شوند، مثل APEX (از Android 10) یا HAL (از Android 11)، باید از سیستم نسخه‌بندی معروف به AIDL پایدار استفاده شود.

مثال

در اینجا یک نمونه میانای AIDL آورده شده است:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

فرایند سرور میانایی را ثبت می‌کند و تماس‌ها را به آن ارائه می‌دهد، و فرایند کارخواه با آن میانارها تماس برقرار می‌کند. در بسیاری از موارد، یک فرایند هم به‌عنوان کارخواه و هم به‌عنوان سرور عمل می‌کند، زیرا ممکن است به چندین رابط ارجاع دهد. برای جزئیات بیشتر درباره زبان AIDL، به زبان AIDL مراجعه کنید. برای جزئیات بیشتر درباره زمان‌های اجرای مختلفی که برای استفاده از این میان‌ها دردسترس است، پشتیبان‌های AIDL را ببینید. این نوع اعلام‌ها دقیقاً مانند اعلام کلاس در زبان داده‌شده است، اما در سراسر فرایندها کار می‌کند.

روش کار

‫AIDL از درایور هسته binder برای برقراری تماس استفاده می‌کند. وقتی تماس برقرار می‌کنید، شناسه روش و همه اشیا در بافری بسته‌بندی و در فرایند از دور کپی می‌شوند که در آن رشته چسبنده منتظر می‌ماند تا داده‌ها را بخواند. وقتی یک رشته پیونددهنده داده‌های تراکنش را دریافت می‌کند، رشته در فرایند محلی به‌دنبال شیء چسبان بومی می‌گردد، و این کلاس داده‌ها را ازهم باز می‌کند و در شیء رابط محلی تماس برقرار می‌کند. این شیء میانای محلی همان شیئی است که فرایند سرور ایجاد و ثبت می‌کند. وقتی تماس‌ها در یک فرایند و یک باطن برقرار می‌شوند، هیچ شیء پراکسی وجود ندارد، بنابراین تماس‌ها بدون هیچ‌گونه بسته‌بندی یا باز کردن بسته‌بندی مستقیم هستند. برای اطلاعات بیشتر، به نمای کلی Binder مراجعه کنید.

تعامل با سرویس‌های دستگاه

‫Android چند فرمان برای تعامل با سرویس‌های دستگاه ارائه می‌دهد. امتحان کنید:

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