AppFunctions, Android प्लैटफ़ॉर्म एपीआई है. इसके साथ Jetpack लाइब्रेरी भी उपलब्ध है, ताकि Android MCP इंटिग्रेशन को आसान बनाया जा सके. यह आपके ऐप्लिकेशन को डिवाइस पर मौजूद एमसीपी सर्वर की तरह काम करने की सुविधा देता है. साथ ही, ऐसे फ़ंक्शन उपलब्ध कराता है जो एजेंट और असिस्टेंट के साथ-साथ, सक्रिय रूप से काम करने वाली सुविधाओं के लिए टूल के तौर पर काम करते हैं. जैसे, Google Gemini. मई 2026 तक, AppFunctions को Gemini के साथ इंटिग्रेट करने की सुविधा, भरोसेमंद टेस्टर के लिए निजी तौर पर उपलब्ध है. AppFunctions और डेवलपमेंट टूल का इस्तेमाल करने के लिए, अब अपने ऐप्लिकेशन तैयार किए जा सकते हैं.
इन AppFunctions को तय करके, अपने ऐप्लिकेशन को Android OS में शामिल रजिस्ट्री को सेवाएं, डेटा, और कार्रवाइयां उपलब्ध कराने की अनुमति दी जाती है. इससे उपयोगकर्ताओं को एजेंट और सिस्टम-लेवल के इंटरैक्शन के ज़रिए टास्क पूरे करने की अनुमति मिलती है.
AppFunctions, मॉडल कॉन्टेक्स्ट प्रोटोकॉल (एमसीपी) में मौजूद टूल के मोबाइल वर्शन के तौर पर काम करते हैं. आम तौर पर, एमसीपी यह तय करता है कि एजेंट, सर्वर-साइड टूल से कैसे कनेक्ट होंगे. वहीं, AppFunctions Android ऐप्लिकेशन के लिए यही तरीका उपलब्ध कराता है. इससे आपको अपने ऐप्लिकेशन की क्षमताओं को ऑर्केस्ट्रेट किए जा सकने वाले "टूल" के तौर पर दिखाने की सुविधा मिलती है. इससे अनुमति वाले ऐप्लिकेशन (कॉल करने वाले) को, लोगों की ज़रूरतों को पूरा करने के लिए इन टूल को खोजने और इस्तेमाल करने में मदद मिलती है. कॉल करने वालों के पास, AppFunctions को ढूंढने और उन्हें लागू करने के लिए EXECUTE_APP_FUNCTIONS अनुमति होनी चाहिए. इनमें एजेंट, ऐप्लिकेशन, और Gemini जैसे एआई असिस्टेंट शामिल हो सकते हैं.
AppFunctions, Android 16 या इसके बाद के वर्शन वाले डिवाइसों पर उपलब्ध है.
इस्तेमाल के उदाहरण
AppFunctions, टास्क को ऑटोमेट करने और उपयोगकर्ता इंटरैक्शन को बेहतर बनाने का एक बेहतरीन तरीका है. अपने ऐप्लिकेशन की सुविधाओं को उपलब्ध कराकर, उपयोगकर्ताओं को नैचुरल लैंग्वेज का इस्तेमाल करके मुश्किल लक्ष्यों को पूरा करने की सुविधा मिलती है. इससे अक्सर, उन्हें यूज़र इंटरफ़ेस (यूआई) के साथ मैन्युअल तरीके से एक-एक करके नेविगेट करने की ज़रूरत नहीं पड़ती.
यहां कुछ उदाहरण दिए गए हैं, जिनसे पता चलता है कि अलग-अलग कैटगरी के ऐप्लिकेशन में, AppFunctions का इस्तेमाल करके बेहतर अनुभव कैसे दिया जा सकता है:
टास्क मैनेज करने और प्रॉडक्टिविटी बढ़ाने से जुड़े ऐप्लिकेशन
- उपयोगकर्ता का अनुरोध: "मुझे आज शाम 5 बजे ऑफ़िस से अपना पैकेज लेने के लिए याद दिलाओ".
- AppFunction ऐक्शन: कॉल करने वाला व्यक्ति, टास्क मैनेज करने वाले ऐप्लिकेशन की पहचान करता है और टास्क बनाने के लिए फ़ंक्शन शुरू करता है. इसके बाद, उपयोगकर्ता के प्रॉम्प्ट के आधार पर टाइटल, समय, और जगह के फ़ील्ड अपने-आप भर जाते हैं.
/** * Create a new task or reminder with a title, due time, and location. * * @param context The execution context provided by the system. * @param title The descriptive title of the task (e.g., "Pick up my package"). * @param dueDateTime The specific date and time when the task should be completed. * @param location The physical location associated with the task (e.g., "Work"). * @return The created Task */ @AppFunction(isDescribedByKDoc = true) suspend fun createTask( context: AppFunctionContext, title: String, dueDateTime: LocalDateTime? = null, location: String? = null ) : Taskमीडिया और मनोरंजन
- उपयोगकर्ता का अनुरोध: "इस साल के टॉप जैज़ एल्बम की एक नई प्लेलिस्ट बनाओ".
- AppFunction ऐक्शन: कॉल करने वाला व्यक्ति, संगीत ऐप्लिकेशन में प्लेलिस्ट बनाने की सुविधा का इस्तेमाल करता है. इसके लिए, वह "साल 2026 के टॉप जैज़ एल्बम" जैसे कॉन्टेक्स्ट को क्वेरी के तौर पर पास करता है, ताकि तुरंत प्लेलिस्ट जनरेट की जा सके.
/** * Create a new music playlist based on a natural language query. * * @param context The execution context provided by the system. * @param query The description used to generate the playlist (e.g., "top jazz albums from 2026"). * @return The final created playlist based on songs. */ @AppFunction(isDescribedByKDoc = true) suspend fun createPlaylistFromQuery( context: AppFunctionContext, query: String ): Playlistअलग-अलग ऐप्लिकेशन के वर्कफ़्लो
- उपयोगकर्ता का अनुरोध: "लीज़ा के ईमेल से नूडल की रेसिपी ढूंढो और उसमें इस्तेमाल होने वाली सामग्री को मेरी ख़रीदारी की सूची में जोड़ो".
- AppFunction ऐक्शन: इस अनुरोध में, कई ऐप्लिकेशन के फ़ंक्शन का इस्तेमाल किया जाता है. सबसे पहले, कॉल करने वाला व्यक्ति ईमेल ऐप्लिकेशन की खोज सुविधा का इस्तेमाल करके, कॉन्टेंट को वापस लाता है. इसके बाद, यह काम के सामान की जानकारी निकालता है और शॉपिंग लिस्ट वाले ऐप्लिकेशन के फ़ंक्शन को चालू करता है, ताकि उपयोगकर्ता की लिस्ट में सामान जोड़ा जा सके.
/** * Search for emails matching a query or sender name to retrieve content like recipes. * * @param context The execution context provided by the system. * @param query The search term or contact name (e.g., "Lisa noodle recipe"). * @return A list of matching email summaries containing the requested information. */ @AppFunction(isDescribedByKDoc = true) suspend fun searchEmails( context: AppFunctionContext, query: String ): List<EmailSummary> /** * Add a list of items or ingredients to the user's active shopping list. * * @param context The execution context provided by the system. * @param items The names of the ingredients or products to add to the list. * @return The final shopping list with new items added */ @AppFunction(isDescribedByKDoc = true) suspend fun addItemsToShoppingList( context: AppFunctionContext, items: List<String> ): ShoppingListCalendar और शेड्यूल करने की सुविधा
- उपयोगकर्ता का अनुरोध: "अगले सोमवार शाम 6 बजे, मेरी मां के जन्मदिन की पार्टी को मेरे कैलेंडर में जोड़ो".
- AppFunction ऐक्शन: मंज़ूरी पा चुका एजेंटिक ऐप्लिकेशन, कैलेंडर ऐप्लिकेशन के "इवेंट बनाएं" फ़ंक्शन को चालू करता है. यह "अगले सोमवार" और "शाम 6 बजे" जैसे काम के कॉन्टेक्स्ट को पार्स करता है, ताकि उपयोगकर्ता को कैलेंडर को मैन्युअल तरीके से खोलने की ज़रूरत न पड़े.
/** * Schedule a new event on the user's primary calendar. * * @param context The execution context provided by the system. * @param title The name of the calendar event (e.g., "Mom's birthday party"). * @param startDateTime The specific date and time the event is scheduled to begin. * @return The created Event object. */ @AppFunction(isDescribedByKDoc = true) suspend fun createCalendarEvent( context: AppFunctionContext, title: String, startDateTime: LocalDateTime ): Event
AppFunctions कैसे काम करती हैं
इस डायग्राम में, ऐप्लिकेशन से एजेंट को AppFunctions शेयर करने और उन्हें लागू करने का सामान्य फ़्लो दिखाया गया है. उपयोगकर्ता के अनुरोधों को मैनेज करते समय, एजेंट सर्वर-साइड रिमोट एमसीपी टूल और स्थानीय AppFunctions, दोनों का इस्तेमाल कर सकते हैं. ऐप्लिकेशन के लोकल फ़ंक्शन इस्तेमाल करने का पूरा फ़्लो यहां दिया गया है:
- AppFunction का एलान: Android ऐप्लिकेशन को AppFunctions का इस्तेमाल करने के लिए बनाया गया है, ताकि इसकी सुविधाएं उपलब्ध कराई जा सकें. जैसे, "नोट बनाएं" या "मैसेज भेजें".
- स्कीमा जनरेशन: AppFunctions Jetpack लाइब्रेरी, एक एक्सएमएल स्कीमा फ़ाइल जनरेट करती है. इसमें ऐप्लिकेशन में मौजूद सभी AppFunctions की सूची होती है. Android OS, इस फ़ाइल का इस्तेमाल करके उपलब्ध AppFunctions को इंडेक्स करता है.
- मेटाडेटा वापस पाना: एजेंट, AppFunction का मेटाडेटा वापस पा सकता है. इसके लिए, उसे क्वेरी करनी होगी.
- AppFunction को चुनना और उसे लागू करना: उपयोगकर्ता के प्रॉम्प्ट के आधार पर, एजेंट सही AppFunction को सही पैरामीटर के साथ चुनता है और उसे लागू करता है.
AppFunctions Jetpack लाइब्रेरी की मदद से, ऐप्लिकेशन की सुविधाओं को आसानी से उपलब्ध कराया जा सकता है.
एनोटेशन प्रोसेसर की मदद से, उन फ़ंक्शन को एनोटेट किया जाता है जिन्हें एजेंट के लिए उपलब्ध कराना है. इसके बाद, कॉल करने वाले लोग AppFunctionManager का इस्तेमाल करके, इंडेक्स किए गए इन फ़ंक्शन को खोज सकते हैं और उन्हें चालू कर सकते हैं.
किसी फ़ंक्शन को शुरू करने से पहले, कॉल करने वालों को यह पुष्टि करनी चाहिए कि डिवाइस पर AppFunctions सुविधा काम करती है. इसके लिए, उन्हें AppFunctionManager का इंस्टेंस वापस पाने की कोशिश करनी चाहिए. यह सुविधा उपलब्ध होने के बाद, कॉल करने वाले लोग isAppFunctionEnabled(packageName,functionId) का इस्तेमाल करके यह पुष्टि कर सकते हैं कि किसी ऐप्लिकेशन में कोई खास फ़ंक्शन चालू है या नहीं. अन्य पैकेज में मौजूद फ़ंक्शन की स्थिति के बारे में क्वेरी करने के लिए, android.permission.EXECUTE_APP_FUNCTIONSpermission की ज़रूरत होती है.
आपके ऐप्लिकेशन को यह पुष्टि करने की ज़रूरत नहीं है कि 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 और MCP में क्या अंतर है?
दोनों ही एआई एजेंट को टूल व्यवस्थित करने की अनुमति देते हैं. हालांकि, इनके आर्किटेक्चर, लेटेंसी, और डेवलपर की मेहनत में काफ़ी अंतर होता है. AppFunctions, ओएस-लेवल के बिल्ट-इन हुक होते हैं. ये सिर्फ़ Android के लिए उपलब्ध होते हैं और स्थानीय तौर पर काम करते हैं. इसके उलट, स्टैंडर्ड एमसीपी सर्वर एक ऐसा समाधान है जो प्लैटफ़ॉर्म पर निर्भर नहीं करता. यह क्लाउड एक्ज़ीक्यूशन और नेटवर्क राउंड-ट्रिप पर निर्भर करता है.
संक्षेप में, AppFunctions की मदद से डेवलप करने पर, आपको ऐप्लिकेशन की मौजूदा स्थिति को सीधे तौर पर डिवाइस पर इस्तेमाल करने की सुविधा मिलती है. साथ ही, आपको अपने Android ऐप्लिकेशन के बाहर सेवाओं को बनाए रखने की ज़रूरत नहीं होती.
मैंने अपने ऐप्लिकेशन में AppFunctions को लागू किया है. मेरा सिस्टम एजेंट उन्हें ऐक्सेस क्यों नहीं कर सकता?
AppFunctions, एक्सपेरिमेंट के तौर पर उपलब्ध सुविधा है. एक्सपेरिमेंट के इस चरण में, पूरे अनुभव की क्वालिटी का आकलन करने के लिए, सिर्फ़ कुछ ऐप्लिकेशन और सिस्टम एजेंट ही पूरी पाइपलाइन को ऐक्सेस कर सकते हैं.
मैं AppFunctions की सामान्य उपलब्धता के लिए अपने ऐप्लिकेशन को कैसे तैयार करूं?
तय करें कि आपको अपने ऐप्लिकेशन की किन सुविधाओं को एजेंटिक ऑटोमेशन के लिए उपलब्ध कराना है.
अपने ऐप्लिकेशन में AppFunctions को लागू किया जा सकता है. इसके लिए, इस पेज पर मौजूद पिछले सेक्शन में दिए गए चरणों का पालन करें. साथ ही, यह पुष्टि करें कि वे डिवाइस पर adb shell cmd app_function list-app-functions को कॉल करके रजिस्टर किए गए हैं.
क्या मुझे डेवलपर के लिए, एजेंटिक रिसर्च की पूरी प्रोसेस को सार्वजनिक तौर पर उपलब्ध होने से पहले इस्तेमाल करने का ऐक्सेस मिल सकता है?
हम Early Access Program (EAP) चला रहे हैं. इसके तहत, हम कुछ ऐप्लिकेशन को टेस्ट करने के लिए शामिल कर रहे हैं. इससे हमें Android पर AppFunctions को प्रोडक्शन के लिए लॉन्च करने के लिए, डेवलपर के अनुभव को बेहतर बनाने में मदद मिलेगी. अगर आपको AppFunctions को इंटिग्रेट करने में दिलचस्पी है, तो ईएपी रजिस्ट्रेशन अप फ़ॉर्म भरें. दिलचस्पी दिखाने का मतलब यह नहीं है कि आपको इंटिग्रेशन की पूरी सुविधा का ऐक्सेस अपने-आप मिल जाएगा. अगर आपके ऐप्लिकेशन को ईएपी के लिए चुना जाता है, तो हम आपको ईमेल भेजेंगे. इसके अलावा, हम आपको तब भी ईमेल भेजेंगे, जब AppFunctions सार्वजनिक तौर पर उपलब्ध हो जाएंगी.
मैं AppFunctions के बारे में सुझाव/राय कैसे दूं या शिकायत कैसे करूं?
एपीआई के बारे में सुझाव/राय देने या शिकायत करने के लिए, समस्या की जानकारी दें. साथ ही, Early Access Program के फ़ॉर्म में अपनी दिलचस्पी रजिस्टर करें.