ממשק Android Interface Definition Language (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 משתמש במנהל הליבה של ה-binder כדי לבצע קריאות. כשמבצעים קריאה, מזהה השיטה וכל האובייקטים נארזים במאגר ומועברים לתהליך מרוחק, שבו חוט של מקשר מחכה לקרוא את הנתונים. אחרי ששרשור של מקשר מקבל נתונים של עסקה, הוא מחפש אובייקט stub מקומי בתהליך המקומי, והכיתה הזו פותחת את האריזה של הנתונים ומבצעת קריאה לאובייקט ממשק מקומי. אובייקט הממשק המקומי הוא האובייקט שמשמש את השרת יוצר ורושם. כשמתבצעות שיחות באותו תהליך ובאותו תהליך בקצה העורפי, לא קיימים אובייקטים של שרת proxy, ולכן הקריאות ישירות ללא לארוז או לפרוק.
אינטראקציה עם שירותים במכשיר
מערכת Android כוללת כמה פקודות שמאפשרות אינטראקציה עם שירותים במכשיר. כדאי לבצע את הפעולות הבאות:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing