סקירה כללית של AppFunctions

התכונה AppFunctions מאפשרת לאפליקציית Android לשתף פונקציות ספציפיות שהמערכת וסוכני ועוזרים וירטואליים שונים מבוססי-AI יכולים לגלות ולהפעיל. הגדרת הפונקציות האלה מאפשרת לאפליקציה לספק שירותים, נתונים ופעולות ל-Android OS, וכך המשתמשים יכולים להשלים משימות באמצעות סוכני AI ואינטראקציות ברמת המערכת.

פונקציות האפליקציה הן המקבילה בנייד של כלים ב-Model Context Protocol‏ (MCP). בדרך כלל, MCP קובע סטנדרט לחיבור של סוכנים לכלים בצד השרת, אבל AppFunctions מספק את אותו מנגנון לאפליקציות ל-Android. כך תוכלו לחשוף את היכולות של האפליקציה שלכם כ'כלים' שאפליקציות מורשות (מבצעות קריאה) יכולות לגלות ולהפעיל כדי למלא את כוונות המשתמשים. למתקשרים צריכה להיות הרשאה EXECUTE_APP_FUNCTIONS כדי לגלות ולהפעיל פונקציות של אפליקציות, והם יכולים לכלול סוכנים, אפליקציות ועוזרים מבוססי-AI כמו Gemini.

אפשר להשתמש ב-AppFunctions במכשירים עם Android מגרסה 16 ואילך.

תרחישים לדוגמה

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

התרחישים הבאים ממחישים איך אפשר להשתמש ב-AppFunctions כדי לשפר את חוויית המשתמש במגוון קטגוריות של אפליקציות:

  • ניהול משימות ופרודוקטיביות
    • בקשת משתמש: "תזכיר לי לאסוף את החבילה מהעבודה היום ב-17:00".
    • פעולת AppFunction: המתקשר מזהה את אפליקציית ניהול המשימות הרלוונטית ומפעיל פונקציה ליצירת משימה, וממלא באופן אוטומטי את השדות של הכותרת, השעה והמיקום על סמך ההנחיה של המשתמש.
  • מדיה ובידור
    • בקשת משתמש: "צור פלייליסט חדש עם אלבומי הג'אז המובילים מהשנה".
    • פעולת AppFunction: המתקשר מפעיל פונקציה של יצירת פלייליסט באפליקציית מוזיקה, ומעביר הקשר כמו 'אלבומי הג&#39אז הטובים ביותר לשנת 2026' בתור השאילתה כדי ליצור ולהפעיל את התוכן באופן מיידי.
  • תהליכי עבודה בין אפליקציות
    • בקשת משתמש: "Find the noodle recipe from Lisa's email and add the ingredients to my shopping list".
    • פעולת AppFunction: הבקשה הזו משתמשת בפונקציות מכמה אפליקציות. קודם, המתקשר משתמש בפונקציית החיפוש של אפליקציית האימייל כדי לאחזר את התוכן. לאחר מכן, הוא מחלץ את המרכיבים הרלוונטיים ומפעיל פונקציה של אפליקציית רשימת קניות כדי לאכלס את הרשימה של המשתמש.
  • יומן ולוחות זמנים
    • בקשת משתמש: "תוסיף ליומן שלי את מסיבת יום ההולדת של אמא שלי ביום שני הבא בשעה 18:00".
    • פעולת AppFunction: אפליקציה עם יכולות של סוכן שאושרה מפעילה את הפונקציה 'יצירת אירוע' באפליקציית היומן, ומנתחת את ההקשר הרלוונטי כמו 'יום שני הבא' ו'18:00' כדי ליצור את הרשומה בלי שהמשתמש יצטרך לפתוח את היומן באופן ידני.

איך פועלות פונקציות של אפליקציות

AppFunctions היא תכונת פלטפורמה של Android 16 וספריית Jetpack נלווית שמאפשרת לאפליקציות לחשוף פונקציות ספציפיות למתקשרים, כמו אפליקציות של סוכנים, כדי לגשת אליהן ולבצע אותן במכשיר.

בתרשים הבא מוצג התהליך האופייני של שיתוף AppFunctions מאפליקציות עם סוכן, ולאחר מכן הפעלת הפונקציות. סביר להניח שהסוכנים ישקלו יחד גם כלים מרוחקים של MCP בצד השרת וגם AppFunctions מקומיות בעת טיפול בבקשות של משתמשים. התהליך המפורט לשימוש ב-AppFunctions מקומיות הוא כדלקמן:

  • הצהרה על AppFunction: אפליקציית Android בנויה כך שהיא חושפת את ה-AppFunctions שלה, כמו 'יצירת הערה' או 'שליחת הודעה'.
  • יצירת סכימה: ספריית AppFunctions Jetpack יוצרת קובץ סכימת XML שמפרט את כל פונקציות האפליקציה שהוגדרו באפליקציה. מערכת ההפעלה Android משתמשת בקובץ הזה כדי ליצור אינדקס של פונקציות האפליקציה הזמינות.
  • אחזור מטא-נתונים: הסוכן יכול לאחזר מטא-נתונים של AppFunction על ידי שליחת שאילתה.
  • בחירה והפעלה של AppFunction: על סמך ההנחיות של המשתמש, הסוכן יבחר ויפעיל את AppFunction המתאים עם הפרמטרים המתאימים.
תרשים שמציג את התהליך האופייני של AppFunctions מחשיפה לאפליקציה ועד להפעלה של הסוכן.
תרשים 1: רצף הפעולות האופייני של חשיפת AppFunctions וביצוען על ידי סוכן.

ספריית AppFunctions Jetpack מפשטת את החשיפה של הפונקציונליות של האפליקציה. בעזרת מעבד אנוטציות (Annotation processor), המפתחים מוסיפים אנוטציות לפונקציות שהם רוצים לחשוף. לאחר מכן, המתקשרים יכולים לגלות ולהפעיל את הפונקציות המאונדקסות האלה באמצעות AppFunctionManager.

לפני שמפעילים פונקציה, המתקשרים צריכים לוודא שהמכשיר תומך בתכונה AppFunctions. לשם כך, הם צריכים לנסות לאחזר מופע של AppFunctionManager. אחרי שהתמיכה תהיה זמינה, המתקשרים יוכלו לאמת אם פונקציה מסוימת מופעלת באפליקציית היעד באמצעות isAppFunctionEnabled(packageName, functionId). כדי לשלוח שאילתה לגבי הסטטוס של פונקציות בחבילות אחרות, צריך את android.permission.EXECUTE_APP_FUNCTIONS permission.

האפליקציה לא נדרשת לאמת אם התכונה AppFunction נתמכת. הטיפול בזה מתבצע אוטומטית בספריית Jetpack. לדוגמה, אפשר להשתמש ב-AppFunctionManager כדי לבדוק אם התכונה נתמכת.

דוגמה ל-AppFunctions באפליקציה לסיכום פגישות עם אפשרויות ליצירה, לעריכה ולרשימה של הערות:

/**
 * A note app's [AppFunction]s.
 */
class NoteFunctions(
    private val noteRepository: NoteRepository
) {
    /**
     * Lists all available notes.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun listNotes(appFunctionContext: AppFunctionContext): List<Note>? {
        return noteRepository.appNotes.ifEmpty { null }?.toList()
    }

    /**
     * Adds a new note to the app.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     * @param title The title of the note.
     * @param content The note's content.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createNote(
        appFunctionContext: AppFunctionContext,
        title: String,
        content: String
    ): Note {
        return noteRepository.createNote(title, content)
    }

    /**
     * Edits a single note.
     *
     * @param appFunctionContext The context in which the AppFunction is executed.
     * @param noteId The target note's ID.
     * @param title The note's title if it should be updated.
     * @param content The new content if it should be updated.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun editNote(
        appFunctionContext: AppFunctionContext,
        noteId: Int,
        title: String?,
        content: String?,
    ): Note? {
        return noteRepository.updateNote(noteId, title, content)
    }
}

/**
 * A note.
 */
@AppFunctionSerializable(isDescribedByKDoc = true)
data class Note(
    /** The note's identifier */
    val id: Int,
    /** The note's title */
    val title: String,
    /** The note's content */
    val content: String
)

שאלות נפוצות

בקטע הבא מפורטות תשובות לשאלות נפוצות לגבי AppFunctions.

אני מפתח אפליקציות. האם אפשר להטמיע את AppFunctions כבר היום?

כן, אפשר להטמיע ולבדוק את AppFunctions באפליקציה שלכם באמצעות ההנחיות שמפורטות בקטעים הקודמים.

הטמעתי את AppFunctions באפליקציה שלי. למה לסוכן המערכת שלי אין גישה אליהן?

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

איך אפשר להכין את האפליקציה לזמינות לכלל המשתמשים (GA) של AppFunctions?

כדאי לחשוב אילו תכונות של האפליקציה רוצים לחשוף לאוטומציה סוכנית. אפשר להטמיע AppFunctions באפליקציה. כדי לעשות זאת, פועלים לפי השלבים בקטעים הקודמים בדף הזה ומוודאים שהם רשומים במכשיר על ידי קריאה ל-adb shell cmd app_function list-app-functions.

האם אפשר לקבל גישה מוקדמת לחוויית פיתוח מבוססת-סוכנים מקצה לקצה?

אנחנו מפעילים תוכנית גישה מוקדמת (EAP) כדי להוסיף אפליקציות נבחרות לבדיקה של חוויית המפתחים מקצה לקצה שנדרשת להשקת AppFunctions בייצור ב-Android. כדי להירשם לתוכנית הגישה המוקדמת לשילוב של פונקציות אפליקציה, אפשר למלא את טופס ההרשמה הזה. ההרשמה לטופס ההתעניינות לא מעניקה גישה אוטומטית לשילוב המלא. אם האפליקציה שלך תיבחר להשתתף בתוכנית הגישה המוקדמת, או כש-AppFunctions יהיו זמינות לכולם, נשלח לך אימייל.

איך אפשר לשלוח משוב על AppFunctions?

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