שפת הגדרה לבניית ממשק Android (AIDL) היא כלי שמאפשר למשתמשים ליצור אבסוקציה של IPC. נתון ממשק (שצוין בקובץ .aidl
), מערכות build שונות משתמשות בקובץ ה-binary aidl
כדי ליצור קישורים ל-C++ או ל-Java, כך שניתן להשתמש בממשק הזה במספר תהליכים, ללא קשר לסביבת זמן הריצה או לגודל הבייט.
אפשר להשתמש ב-AIDL בין כל תהליך ב-Android: בין רכיבי פלטפורמה או בין אפליקציות. עם זאת, הוא אף פעם לא משמש כ-API לאפליקציות. אפשר להשתמש ב-AIDL, למשל, כדי להטמיע ממשק API של SDK בפלטפורמה, אבל ממשק ה-API של ה-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 כדי לבצע קריאות. כשמבצעים קריאה, מזהה השיטה וכל האובייקטים נארזים במאגר ומועברים לתהליך מרוחק, שבו חוט של מקשר מחכה לקרוא את הנתונים. אחרי ששרשור של מחבר מקבל נתונים של עסקה, הוא מחפש אובייקט stub מקומי בתהליך המקומי, והכיתה הזו פותחת את האריזה של הנתונים ומבצעת קריאה לאובייקט ממשק מקומי. אובייקט הממשק המקומי הזה הוא זה שנוצר ומירשם על ידי תהליך השרת. כשמבצעים קריאות באותו תהליך ובאותו קצה עורפי, אין אובייקטים של שרת proxy, ולכן הקריאות הן ישירות ללא אריזה או ביטול אריזה.
אינטראקציה עם שירותים במכשיר
מערכת Android כוללת כמה פקודות שמאפשרות אינטראקציה עם שירותים במכשיר. כדאי לבצע את הפעולות הבאות:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing