סקירה כללית על AIDL

שפת ההגדרה לבניית ממשק Android‏ (AIDL) היא כלי שמאפשר למשתמשים להסתיר את פרטי ה-IPC. בהינתן ממשק (שצוין בקובץ .aidl), מערכות בנייה שונות משתמשות בקובץ הבינארי aidl כדי ליצור קישורי C++‎ או Java, כך שאפשר להשתמש בממשק הזה בתהליכים שונים, ללא קשר לזמן הריצה או לרוחב הסיביות.

אפשר להשתמש ב-AIDL בין כל תהליך ב-Android: בין רכיבי פלטפורמה או בין אפליקציות. עם זאת, הוא אף פעם לא משמש כממשק API לאפליקציות. לדוגמה, אפשר להשתמש ב-AIDL כדי להטמיע SDK API בפלטפורמה, אבל ממשק ה-SDK API אף פעם לא מכיל AIDL APIs ישירות. למידע על שימוש ב-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);
    }

תהליך השרת רושם ממשק ומשרת קריאות אליו, ותהליך הלקוח מבצע קריאות לממשקים האלה. במקרים רבים, תהליך מסוים פועל גם כלקוח וגם כשרת, כי הוא עשוי להפנות לכמה ממשקי API. לפרטים נוספים על שפת AIDL, אפשר לעיין במאמר שפת AIDL. לפרטים נוספים על סביבות הריצה השונות שזמינות לשימוש בממשקים האלה, אפשר לעיין במאמר בנושא בק-אנד של AIDL. הצהרות מהסוג הזה דומות בדיוק להצהרת מחלקה בשפה נתונה, אבל הן פועלות בין תהליכים.

איך זה עובד

‫AIDL משתמש במנהל התקן של ליבת ה-binder כדי לבצע קריאות. כשמבצעים שיחה, מזהה השיטה וכל האובייקטים נארזים לתוך מאגר זמני ומועתקים לתהליך מרוחק שבו השרשור של ה-binder ממתין לקריאת הנתונים. אחרי ששרשור של Binder מקבל נתונים של טרנזקציה, השרשור מחפש אובייקט stub מקורי בתהליך המקומי. המחלקה הזו פורקת את הנתונים ומבצעת קריאה באובייקט של ממשק מקומי. אובייקט הממשק המקומי הזה הוא זה שתהליך השרת יוצר ורושם. כשמתבצעות קריאות באותו תהליך ובאותו קצה עורפי, לא קיימים אובייקטים של שרת proxy, ולכן הקריאות הן ישירות ללא אריזה או פריקה. מידע נוסף זמין במאמר סקירה כללית על Binder.

אינטראקציה עם שירותים במכשיר

מערכת Android כוללת כמה פקודות שמאפשרות אינטראקציה עם שירותים במכשיר. כדאי לבצע את הפעולות הבאות:

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