نظرة عامة على AppFunctions

تتيح AppFunctions لتطبيق Android مشاركة أجزاء معيّنة من الوظائف التي يمكن للنظام ومختلف وكلاء ومساعدي الذكاء الاصطناعي اكتشافها واستدعاؤها. من خلال تحديد هذه الدوال، يمكنك تمكين تطبيقك من تقديم الخدمات والبيانات والإجراءات إلى نظام التشغيل Android، ما يتيح للمستخدمين إكمال المهام من خلال وكلاء الذكاء الاصطناعي والتفاعلات على مستوى النظام.

تعمل AppFunctions كأدوات مكافئة للأدوات المتوفّرة في بروتوكول سياق النموذج (MCP) على الأجهزة الجوّالة. في حين أنّ MCP يوحّد بشكل تقليدي طريقة ربط البرامج بأدوات من جهة الخادم، توفّر AppFunctions الآلية نفسها لتطبيقات Android. يتيح لك ذلك عرض إمكانات تطبيقك على شكل "أدوات" قابلة للتنفيذ يمكن للتطبيقات المصرّح لها (المتصلة) اكتشافها وتنفيذها لتلبية طلبات المستخدمين. يجب أن يكون لدى المتصلين إذن EXECUTE_APP_FUNCTIONS لاكتشاف AppFunctions وتنفيذها، ويمكن أن يشمل ذلك الوكلاء والتطبيقات ومساعدي الذكاء الاصطناعي، مثل Gemini.

تعمل ميزة AppFunctions مع الأجهزة التي تعمل بالإصدار 16 من نظام التشغيل Android أو الإصدارات الأحدث.

أمثلة على حالات الاستخدام

توفّر AppFunctions آلية فعّالة لأتمتة المهام وتسهيل تفاعلات المستخدمين. من خلال إتاحة إمكانات تطبيقك، يمكنك مساعدة المستخدمين على تحقيق أهداف معقّدة باستخدام اللغة الطبيعية، ما يغنيهم غالبًا عن التنقّل اليدوي خطوة بخطوة في واجهة المستخدم.

توضّح السيناريوهات التالية كيفية استخدام AppFunctions لتقديم تجارب ضمن مجموعة متنوعة من فئات التطبيقات:

  • إدارة المهام والإنتاجية
    • طلب المستخدم: "ذكّرني باستلام طردي من العمل اليوم في الساعة 5 مساءً".
    • إجراء AppFunction: يحدّد المتصل تطبيق إدارة المهام المناسب ويستدعي وظيفة لإنشاء مهمة، مع ملء حقول العنوان والوقت والموقع الجغرافي تلقائيًا استنادًا إلى طلب المستخدم.
  • الوسائط والترفيه
    • طلب المستخدم: "أنشئ قائمة تشغيل جديدة تضم أفضل ألبومات الجاز لهذا العام".
    • إجراء AppFunction: ينفّذ المتصل وظيفة إنشاء قائمة تشغيل داخل تطبيق موسيقى، ويمرّر سياقًا مثل "أبرز ألبومات الجاز لعام 2026" كطلب بحث لإنشاء المحتوى وتشغيله على الفور.
  • مهام سير العمل على مستوى التطبيقات
    • طلب المستخدم: "ابحث عن وصفة النودلز من البريد الإلكتروني الخاص بـ "ليلى" وأضِف المكوّنات إلى قائمة التسوّق".
    • إجراء AppFunction: يستخدم هذا الطلب وظائف من تطبيقات متعددة. أولاً، يستخدم المتصل وظيفة البحث في تطبيق البريد الإلكتروني لاسترداد المحتوى. بعد ذلك، يستخرج المكونات ذات الصلة ويستدعي وظيفة تطبيق قائمة التسوّق لملء قائمة المستخدم.
  • التقويم والجداول الزمنية
    • طلب المستخدِم: "أضِف حفلة عيد ميلاد أمي إلى تقويمي ليوم الاثنين القادم الساعة 6 مساءً".
    • إجراء AppFunction: يستدعي التطبيق الذي تمّت الموافقة عليه وظيفة "إنشاء حدث" في تطبيق التقويم، ويحلّل السياق ذي الصلة، مثل "الاثنين المقبل" و"الساعة 6 مساءً"، لإنشاء الإدخال بدون أن يضطر المستخدم إلى فتح التقويم يدويًا.

طريقة عمل AppFunctions

AppFunctions هي ميزة في نظام Android 16 الأساسي ومكتبة Jetpack مصاحبة لها تتيح للتطبيقات عرض وظائف معيّنة للمتصلين، مثل تطبيقات الوكيل، للوصول إليها وتنفيذها على الجهاز.

يوضّح المخطّط البياني التالي التدفّق النموذجي لكيفية مشاركة التطبيقات لوظائف AppFunctions مع وكيل ثم تنفيذها. من المرجّح أن يأخذ الوكلاء في الاعتبار أدوات MCP البعيدة من جهة الخادم وAppFunctions المحلية معًا عند التعامل مع طلبات المستخدمين. في ما يلي التدفق التفصيلي لاستخدام AppFunctions المحلية:

  • تعريف AppFunction: تم تصميم تطبيق Android لعرض AppFunctions، مثل "إنشاء ملاحظة" أو "إرسال رسالة".
  • إنشاء المخطط: تنشئ مكتبة AppFunctions Jetpack ملف مخطط XML يتضمّن جميع وظائف AppFunctions المعرَّفة في التطبيق. ويستخدم نظام التشغيل Android هذا الملف لفهرسة وظائف AppFunctions المتاحة.
  • استرداد البيانات الوصفية: يمكن للوكيل استرداد البيانات الوصفية الخاصة بـ AppFunction من خلال طلبها.
  • اختيار AppFunction وتنفيذها: استنادًا إلى طلبات المستخدم، سيختار الوكيل AppFunction المناسبة وينفّذها باستخدام المَعلمات المناسبة.
مخطّط بياني يوضّح التدفق النموذجي لـ AppFunctions من عرض التطبيق إلى تنفيذ الوكيل
الشكل 1: المسار النموذجي لكيفية عرض AppFunctions وتنفيذها لاحقًا بواسطة وكيل.

تسهّل مكتبة AppFunctions Jetpack إتاحة وظائف تطبيقك. باستخدام معالج التعليقات التوضيحية، يضيف المطوّرون تعليقات توضيحية إلى الدوال التي يريدون إتاحتها. يمكن للمتصلين بعد ذلك العثور على هذه الدوال المفهرسة واستدعائها باستخدام 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 هي ميزة تجريبية. لتقييم جودة التجربة بشكل دقيق خلال هذه المرحلة التجريبية، يمكن لعدد محدود فقط من التطبيقات وعناصر النظام الوصول إلى مسار المعالجة الكامل.

كيف يمكنني إعداد تطبيقي ليكون متوفرًا للجمهور العام من AppFunctions؟

حدِّد ميزات تطبيقك التي تريد إتاحتها لأدوات التشغيل الآلي المستندة إلى الذكاء الاصطناعي. يمكنك تنفيذ AppFunctions في تطبيقك باتّباع الخطوات الواردة في الأقسام السابقة من هذه الصفحة، والتأكّد من تسجيلها على الجهاز من خلال استدعاء adb shell cmd app_function list-app-functions.

هل يمكنني الحصول على وصول مبكر إلى تجربة المطوّر المتكاملة والمستندة إلى الذكاء الاصطناعي الوكيل؟

نحن بصدد إجراء برنامج استخدام المنتج قبل إطلاقه (EAP) لإعداد تطبيقات محدّدة لاختبار تجربة المطوّر الشاملة المطلوبة لإطلاق ميزة AppFunctions في الإصدار العلني على Android. يمكنك تسجيل اهتمامك بدمج AppFunctions من خلال نموذج التسجيل في برنامج استخدام الميزة قبل إطلاقها. عند تسجيل اهتمامك، لن تحصل تلقائيًا على إذن الوصول إلى عملية الدمج الكاملة. سنرسل إليك رسالة إلكترونية إذا تم اختيار تطبيقك للمشاركة في برنامج الاستخدام المبكر، أو لإعلامك عندما تصبح ميزة AppFunctions متاحة للجميع.

كيف يمكنني تقديم ملاحظات حول AppFunctions؟

يمكنك تقديم ملاحظاتك حول واجهة برمجة التطبيقات من خلال تسجيل مشكلة وتسجيل اهتمامك في نموذج برنامج استخدام المنتج قبل إطلاقه.