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

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

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

س: ما هي وكلاء النظام الذين يمكنهم الوصول إلى ميزة AppFunctions؟

ج: لا يمكن إلا لعدد محدود من وكلاء النظام الوصول إلى المسار بأكمله أثناء تجربة ميزة AppFunctions.

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

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

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

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

س: كيف يمكنني تقديم ملاحظات حول ميزة AppFunctions؟

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