ภาพรวมของ AppFunctions

AppFunctions เป็น API ของแพลตฟอร์ม Android พร้อมด้วย ไลบรารี Jetpack ที่มาพร้อมกันเพื่อลดความซับซ้อนในการผสานรวม Android MCP โดยช่วยให้แอปของคุณทำงานเหมือนเซิร์ฟเวอร์ MCP ในอุปกรณ์ ซึ่งมีฟังก์ชันที่ทำหน้าที่เป็นเครื่องมือสำหรับฟีเจอร์เชิงรุก รวมถึง Agent และ Assistant เช่น Google Gemini ณ เดือนพฤษภาคม 2026 การผสานรวม AppFunctions กับ Gemini อยู่ในเวอร์ชันทดลองใช้แบบส่วนตัวกับผู้ทดสอบที่เชื่อถือได้ คุณสามารถเริ่มเตรียมแอปให้พร้อมใช้ AppFunctions และเครื่องมือการพัฒนาได้แล้วตอนนี้

การกำหนด AppFunctions เหล่านี้จะช่วยให้แอปของคุณให้บริการ ข้อมูล และการดำเนินการแก่รีจิสทรีที่สร้างขึ้นในระบบปฏิบัติการ Android ซึ่งช่วยให้ผู้ใช้ทำงานให้เสร็จสมบูรณ์ผ่าน Agent และการโต้ตอบระดับระบบได้

AppFunctions ทำหน้าที่เป็นเครื่องมือที่เทียบเท่ากับเครื่องมือใน Model Context Protocol (MCP) สำหรับอุปกรณ์เคลื่อนที่ แม้ว่าโดยทั่วไปแล้ว MCP จะกำหนดมาตรฐานวิธีที่ Agent เชื่อมต่อกับเครื่องมือฝั่งเซิร์ฟเวอร์ แต่ AppFunctions ก็มีกลไกเดียวกันสำหรับแอป Android ซึ่งช่วยให้คุณแสดงความสามารถของแอปเป็น "เครื่องมือ" ที่จัดระเบียบได้ ซึ่งแอปที่ได้รับอนุญาต (ผู้เรียก) สามารถค้นพบและเรียกใช้เพื่อตอบสนองความตั้งใจของผู้ใช้ ผู้เรียกต้องมีสิทธิ์ EXECUTE_APP_FUNCTIONS จึงจะ ค้นพบและเรียกใช้ AppFunctions ได้ และอาจรวมถึง Agent, แอป และ AI Assistant เช่น 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
    
  • ปฏิทินและการกำหนดเวลา

    • คำขอของผู้ใช้: "เพิ่มปาร์ตี้วันเกิดของแม่ลงในปฏิทินของฉันในวัน จันทร์หน้าเวลา 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 กับ Agent และเรียกใช้ AppFunctions ในภายหลัง Agent มีแนวโน้มที่จะพิจารณาทั้งเครื่องมือ MCP ระยะไกลฝั่งเซิร์ฟเวอร์และ AppFunctions ในเครื่องพร้อมกันเมื่อจัดการคำขอของผู้ใช้ ขั้นตอนโดยละเอียดสำหรับการใช้ AppFunctions ในเครื่องมีดังนี้

  • การประกาศ AppFunction: แอป Android ได้รับการสร้างขึ้นเพื่อใช้ AppFunctions ในการ ทำให้ฟีเจอร์ต่างๆ พร้อมใช้งาน เช่น "สร้างโน้ต" หรือ "ส่งข้อความ"
  • การสร้างสคีมา: ไลบรารี AppFunctions Jetpack จะสร้างไฟล์สคีมา XML ที่แสดงรายการ AppFunctions ที่ประกาศไว้ทั้งหมดในแอป ระบบปฏิบัติการ Android ใช้ไฟล์นี้เพื่อจัดทำดัชนี AppFunctions ที่พร้อมใช้งาน
  • การดึงข้อมูลเมตา: Agent สามารถดึงข้อมูลเมตาของ AppFunction ได้โดยการ ค้นหาข้อมูลเมตา
  • การเลือกและการเรียกใช้ AppFunction: Agent จะเลือกและเรียกใช้ AppFunction ที่เหมาะสมพร้อมพารามิเตอร์ที่เหมาะสมตามข้อความแจ้งของผู้ใช้
โดยปกติแล้วโฟลว์ของ AppFunctions จะเริ่มจากการแสดงแอปไปจนถึงการดำเนินการของเอเจนต์
รูปที่ 1: ขั้นตอนทั่วไปที่ Agent แสดงและ เรียกใช้ AppFunctions ในภายหลัง

ไลบรารี 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 อย่างไร

ทั้ง 2 อย่างช่วยให้ AI Agent จัดระเบียบเครื่องมือได้ แต่มีสถาปัตยกรรม เวลาในการตอบสนอง และความพยายามของนักพัฒนาแอปที่จำเป็นแตกต่างกันอย่างมาก AppFunctions เป็นฮุกระดับระบบปฏิบัติการในตัวที่ใช้ได้เฉพาะใน Android ซึ่งทำงานในเครื่อง ในทางตรงกันข้าม เซิร์ฟเวอร์ MCP มาตรฐานเป็นโซลูชันที่ไม่ขึ้นกับแพลตฟอร์ม ซึ่งอาศัยการดำเนินการบนคลาวด์และการรับส่งข้อมูลผ่านเครือข่าย

กล่าวโดยย่อ การพัฒนาด้วย AppFunctions ช่วยให้คุณใช้สถานะแอปที่มีอยู่บนอุปกรณ์ได้โดยตรง และไม่จำเป็นต้องดูแลบริการภายนอกแอป Android

ฉันใช้ AppFunctions ในแอปแล้ว ทำไม Agent ของระบบจึงเข้าถึง AppFunctions ไม่ได้

AppFunctions เป็นฟีเจอร์ทดลอง เพื่อให้ประเมินคุณภาพของประสบการณ์โดยรวมได้อย่างรอบคอบในระยะทดลองนี้ มีเพียงแอปและ Agent ของระบบจำนวนจำกัดเท่านั้นที่เข้าถึงไปป์ไลน์ทั้งหมดได้

ฉันจะเตรียมแอปให้พร้อมสำหรับเวอร์ชันสำหรับผู้ใช้ทั่วไปของ AppFunctions ได้อย่างไร

พิจารณาฟีเจอร์ของแอปที่ต้องการแสดงให้การทำงานอัตโนมัติของ Agent คุณสามารถใช้ AppFunctions ในแอปได้ โดยทำตามขั้นตอนในส่วนก่อนหน้าของหน้านี้ และตรวจสอบว่าได้ลงทะเบียนไว้ในอุปกรณ์โดยเรียกใช้ adb shell cmd app_function list-app-functions

ฉันจะรับสิทธิ์เข้าถึงประสบการณ์ของนักพัฒนาแอปที่ได้จากตัวแทนแบบครบวงจรได้ไหม

เรากำลังจัดโปรแกรมทดลองใช้ก่อนเปิดตัว (EAP) เพื่อให้แอปที่เลือกเข้าร่วมทดสอบประสบการณ์ของนักพัฒนาแอปแบบครบวงจรที่จำเป็นสำหรับการเปิดตัว AppFunctions ในเวอร์ชันที่ใช้งานจริงบน Android คุณสามารถลงทะเบียนแสดงความสนใจในการผสานรวม AppFunctions ผ่านแบบฟอร์มการลงทะเบียน EAP นี้ การลงทะเบียนแสดงความสนใจไม่ได้หมายความว่าคุณจะได้รับสิทธิ์เข้าถึงการผสานรวมทั้งหมดโดยอัตโนมัติ เราจะส่งอีเมลถึงคุณหากแอปของคุณได้รับเลือกให้เข้าร่วม EAP หรือแจ้งให้คุณทราบเมื่อ AppFunctions พร้อมให้บริการแก่สาธารณะ

ฉันจะแสดงความคิดเห็นเกี่ยวกับ AppFunctions ได้อย่างไร

คุณสามารถแสดงความคิดเห็นเกี่ยวกับ API ได้โดยการยื่นปัญหาและ ลงทะเบียนแสดงความสนใจในแบบฟอร์มโปรแกรมทดลองใช้ก่อนเปิดตัว