סקירה כללית של AIDL, סקירה כללית של AIDL

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

ניתן להשתמש ב-AIDL בין כל תהליך באנדרואיד: בין רכיבי פלטפורמה או בין אפליקציות. עם זאת, הוא אף פעם לא משמש כ-API עבור אפליקציות. ניתן להשתמש ב-AIDL כדי ליישם ממשק API של SDK בפלטפורמה, למשל, אך משטח ה-API של SDK לעולם אינו מכיל ממשקי API של AIDL ישירות. לתיעוד על אופן השימוש ב-AIDL בין אפליקציות ישירות, עיין בתיעוד המתאים למפתחי אנדרואיד . כאשר נעשה שימוש ב-AIDL בין רכיבי פלטפורמה המתעדכנים בנפרד, כגון APEXs (החל ב-Android 10) או HALs (החל ב-Android 11), יש להשתמש במערכת גירסאות המכונה Stable AIDL .

דוגמא

הנה ממשק AIDL לדוגמה:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

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

איך זה עובד

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

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

אנדרואיד מגיעה עם כמה פקודות כדי לאפשר אינטראקציה עם שירותים במכשיר. לְנַסוֹת:

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