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