AppFunctions เป็น API แพลตฟอร์ม Android ที่มีไลบรารี Jetpack มาด้วยเพื่อลดความซับซ้อนของการผสานรวม MCP ของ Android ซึ่งช่วยให้แอปของคุณทำงานได้เหมือนเซิร์ฟเวอร์ MCP ในอุปกรณ์ โดยมีฟังก์ชันที่ทำหน้าที่เป็นเครื่องมือสำหรับใช้โดยฟีเจอร์เชิงรุก รวมถึงเอเจนต์และผู้ช่วย เช่น Google Gemini ตั้งแต่เดือนพฤษภาคม 2026 การผสานรวม AppFunctions กับ Gemini จะอยู่ในการแสดงตัวอย่างส่วนตัวกับ ผู้ทดสอบที่เชื่อถือได้ คุณเริ่มเตรียมแอปเพื่อใช้ AppFunctions และ เครื่องมือพัฒนาซอฟต์แวร์ได้แล้ว
การกำหนด AppFunctions เหล่านี้จะช่วยให้แอปของคุณให้บริการ ข้อมูล และการดำเนินการแก่รีจิสทรีที่สร้างไว้ในระบบปฏิบัติการ Android ซึ่งจะช่วยให้ผู้ใช้ ทํางานให้เสร็จสมบูรณ์ผ่านเอเจนต์และการโต้ตอบระดับระบบ
AppFunctions ทำหน้าที่เป็นเครื่องมือเทียบเท่ากับเครื่องมือในอุปกรณ์เคลื่อนที่ภายใน Model Context
Protocol (MCP) แม้ว่าโดยปกติแล้ว MCP จะกำหนดมาตรฐานวิธีที่เอเจนต์
เชื่อมต่อกับเครื่องมือฝั่งเซิร์ฟเวอร์ แต่ AppFunctions ก็มีกลไกเดียวกันสำหรับ
แอป Android ซึ่งจะช่วยให้คุณแสดงความสามารถของแอปเป็น "เครื่องมือ" ที่สามารถจัดระเบียบได้ ซึ่งแอปที่ได้รับอนุญาต (ผู้โทร) สามารถค้นพบและดำเนินการเพื่อตอบสนองความตั้งใจของผู้ใช้ได้ ผู้โทรต้องมีสิทธิ์ EXECUTE_APP_FUNCTIONS ในการค้นหาและเรียกใช้ AppFunction รวมถึงสามารถรวมเอเจนต์ แอป และผู้ช่วย AI เช่น Gemini ได้
AppFunctions พร้อมใช้งานในอุปกรณ์ที่ใช้ Android 16 ขึ้นไป
ตัวอย่าง Use Case
AppFunctions เป็นกลไกที่มีประสิทธิภาพในการทำให้งานเป็นอัตโนมัติและปรับปรุงการโต้ตอบของผู้ใช้ การเปิดความสามารถของแอปจะช่วยให้ผู้ใช้ บรรลุเป้าหมายที่ซับซ้อนได้โดยใช้ภาษาธรรมชาติ ซึ่งมักจะแทนที่ความจำเป็นในการ นําทางด้วยตนเองแบบทีละขั้นตอนด้วย UI ของคุณ
สถานการณ์ต่อไปนี้แสดงให้เห็นวิธีใช้ 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เวิร์กโฟลว์ข้ามแอป
- คำขอของผู้ใช้: "ค้นหาสูตรก๋วยเตี๋ยวจากอีเมลของ Lisa แล้วเพิ่ม ส่วนผสมลงในรายการช็อปปิ้งของฉัน"
- การดำเนินการ 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> ): ShoppingListปฏิทินและการกำหนดเวลา
- คำขอของผู้ใช้: "เพิ่มปาร์ตี้วันเกิดของแม่ลงในปฏิทินของฉันในวันจันทร์หน้าเวลา 18:00 น."
- การดำเนินการ AppFunction: แอปที่ได้รับอนุมัติจะเรียกใช้ฟังก์ชัน "สร้างกิจกรรม" ของแอปปฏิทิน โดยแยกวิเคราะห์บริบทที่เกี่ยวข้อง เช่น "วันจันทร์หน้า" และ "18:00 น." เพื่อสร้างรายการโดยที่ผู้ใช้ไม่ต้อง เปิดปฏิทินด้วยตนเอง
/** * 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
แผนภาพต่อไปนี้แสดงขั้นตอนทั่วไปของวิธีที่แอปแชร์ AppFunction กับเอเจนต์และวิธีที่เอเจนต์เรียกใช้ AppFunction ดังกล่าว ตัวแทนมีแนวโน้มที่จะพิจารณาทั้งเครื่องมือ MCP ระยะไกลฝั่งเซิร์ฟเวอร์และ AppFunctions ในเครื่องร่วมกันเมื่อ จัดการคำขอของผู้ใช้ ขั้นตอนโดยละเอียดสำหรับการใช้ AppFunctions ในเครื่องมีดังนี้
- การประกาศ AppFunction: แอป Android สร้างขึ้นเพื่อใช้ AppFunction เพื่อ ทำให้ฟีเจอร์พร้อมใช้งาน เช่น "สร้างโน้ต" หรือ "ส่งข้อความ"
- การสร้างสคีมา: ไลบรารี AppFunctions Jetpack จะสร้างไฟล์สคีมา XML ที่แสดงรายการ 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
)
ตัวอย่าง ทักษะ และเอเจนต์ทดสอบ
เราได้จัดเตรียมสิ่งต่อไปนี้ไว้เพื่อช่วยคุณพัฒนาทักษะใน AppFunction
- สำรวจตัวอย่าง AppFunctions เพื่อยืนยันและสำรวจวิธี การทำงานของทุกอย่างในอุปกรณ์
- ทักษะ AppFunctions จะค้นหาและแนะนำฟีเจอร์ ของแอปที่สามารถนำไปใช้เป็น AppFunctions ได้ นอกจากนี้ยังสามารถใช้ และปรับแต่ง AppFunctions ที่มีอยู่ให้คุณได้ด้วย
- หากต้องการทดสอบแบบครบวงจร ให้ใช้แอปตัวแทนตัวอย่าง
คำถามที่พบบ่อย
ส่วนต่อไปนี้จะตอบคำถามที่พบบ่อยเกี่ยวกับ AppFunctions
ฉันเป็นนักพัฒนาแอป ฉันจะใช้ AppFunctions ได้เลยไหม
ได้ คุณสามารถติดตั้งใช้งานและทดสอบ AppFunctions ภายในแอปได้โดย ทำตามคำแนะนำที่อธิบายไว้โดยละเอียดในส่วนก่อนหน้า
AppFunctions กับ MCP แตกต่างกันอย่างไร
ทั้ง 2 อย่างช่วยให้ AI Agent จัดการเครื่องมือได้ แต่มีความแตกต่างกันอย่างมากในด้านสถาปัตยกรรม เวลาในการตอบสนอง และความพยายามของนักพัฒนาซอฟต์แวร์ที่จำเป็น AppFunctions คือ ฮุกระดับระบบปฏิบัติการในตัวที่ใช้ได้เฉพาะใน Android ซึ่งจะดำเนินการในเครื่อง ในทางตรงกันข้าม เซิร์ฟเวอร์ MCP มาตรฐานเป็นโซลูชันที่ไม่ขึ้นอยู่กับแพลตฟอร์ม ซึ่งอาศัยการดำเนินการในระบบคลาวด์ และการรับส่งข้อมูลในเครือข่าย
กล่าวโดยย่อคือ การพัฒนาด้วย AppFunctions ช่วยให้คุณใช้สถานะแอปที่มีอยู่ ในอุปกรณ์ได้โดยตรง และไม่จำเป็นต้องดูแลบริการภายนอกแอป Android
ฉันได้ติดตั้งใช้งาน AppFunctions ในแอปแล้ว ทำไมตัวแทนระบบของฉันจึงเข้าถึงฟังก์ชันเหล่านั้นไม่ได้
AppFunctions เป็นฟีเจอร์ทดลอง เพื่อประเมินคุณภาพของ ประสบการณ์โดยรวมอย่างรอบคอบในช่วงระยะการทดลองนี้ มีเพียงแอปและตัวแทนระบบจำนวนจำกัดเท่านั้นที่เข้าถึงไปป์ไลน์ทั้งหมดได้
ฉันจะเตรียมแอปให้พร้อมสำหรับเวอร์ชันสำหรับผู้ใช้ทั่วไปของ AppFunctions ได้อย่างไร
พิจารณาว่าต้องการเปิดเผยฟีเจอร์ใดของแอปให้กับการทำงานอัตโนมัติแบบเอเจนต์
คุณสามารถใช้ AppFunctions ในแอปได้ โดยทำตามขั้นตอนใน
ส่วนก่อนหน้าในหน้านี้ และตรวจสอบว่าฟังก์ชันเหล่านั้นลงทะเบียนใน
อุปกรณ์โดยการเรียกใช้ adb shell cmd app_function list-app-functions
ฉันจะรับสิทธิ์เข้าถึงประสบการณ์การใช้งานของนักพัฒนาแอปแบบเอเจนต์ตั้งแต่ต้นจนจบก่อนใครได้ไหม
เรากำลังดำเนินการโปรแกรมทดลองใช้ก่อนเปิดตัว (EAP) เพื่อเริ่มต้นใช้งานแอปบางแอปในการทดสอบ ประสบการณ์การใช้งานแบบครบวงจรของนักพัฒนาแอปที่จำเป็นต่อการเปิดตัว AppFunction ไปยัง เวอร์ชันที่ใช้งานจริงบน Android คุณสามารถลงทะเบียนแสดงความสนใจในการผสานรวม AppFunctions ผ่านแบบฟอร์มลงทะเบียน EAP นี้ การลงทะเบียนแสดงความสนใจไม่ได้หมายความว่าคุณจะได้รับสิทธิ์เข้าถึงการผสานรวมทั้งหมดโดยอัตโนมัติ เราจะส่งอีเมลถึงคุณหากแอปของคุณได้รับเลือกให้เข้าร่วม EAP หรือเพื่อแจ้งให้คุณทราบเมื่อ AppFunctions พร้อมให้บริการแก่บุคคลทั่วไป
ฉันจะแสดงความคิดเห็นเกี่ยวกับ AppFunctions ได้อย่างไร
คุณแสดงความคิดเห็นเกี่ยวกับ API ได้โดยยื่นปัญหาและลงทะเบียนแสดงความสนใจในแบบฟอร์มโปรแกรมทดลองใช้ก่อนเปิดตัว