Ringkasan AppFunctions

AppFunctions adalah API platform Android dengan library Jetpack pendamping untuk menyederhanakan integrasi MCP Android. API ini memungkinkan aplikasi Anda berperilaku seperti server MCP di perangkat, yang berkontribusi pada fungsi yang bertindak sebagai alat untuk digunakan oleh fitur proaktif bersama dengan agen dan asisten, seperti Google Gemini. Mulai Mei 2026, integrasi AppFunctions dengan Gemini berada dalam pratinjau pribadi dengan penguji tepercaya. Anda dapat mulai menyiapkan aplikasi sekarang untuk menggunakan AppFunctions dan alat pengembangan.

Dengan menentukan AppFunctions ini, Anda memungkinkan aplikasi menyediakan layanan, data, dan tindakan ke registry yang terintegrasi ke dalam Android OS, sehingga pengguna dapat menyelesaikan tugas melalui agen dan interaksi tingkat sistem.

AppFunctions berfungsi sebagai alat yang setara dengan perangkat seluler dalam Model Context Protocol (MCP). Meskipun MCP secara tradisional menstandarkan cara agen terhubung ke alat sisi server, AppFunctions menyediakan mekanisme yang sama untuk aplikasi Android. Hal ini memungkinkan Anda mengekspos kemampuan aplikasi sebagai "alat" yang dapat diatur dan dapat ditemukan serta dieksekusi oleh aplikasi yang diotorisasi (pemanggil) untuk memenuhi intent pengguna. Pemanggil harus memiliki izin EXECUTE_APP_FUNCTIONS untuk menemukan dan menjalankan AppFunctions, dan dapat menyertakan agen, aplikasi, dan asisten AI seperti Gemini.

AppFunctions tersedia di perangkat yang menjalankan Android 16 atau yang lebih baru.

Contoh kasus penggunaan

AppFunctions menyediakan mekanisme yang canggih untuk mengotomatiskan tugas dan menyederhanakan interaksi pengguna. Dengan membuka kemampuan aplikasi, Anda memungkinkan pengguna mencapai sasaran yang kompleks menggunakan bahasa alami, yang sering kali menggantikan kebutuhan navigasi manual langkah demi langkah dengan UI Anda.

Skenario berikut mengilustrasikan cara AppFunctions dapat digunakan untuk mendorong pengalaman dalam berbagai kategori aplikasi:

  • Pengelolaan tugas dan produktivitas

    • Permintaan pengguna: "Ingatkan saya untuk mengambil paket saya di kantor hari ini pukul 17.00".
    • Tindakan AppFunction: Pemanggil mengidentifikasi aplikasi pengelolaan tugas yang relevan dan memanggil fungsi untuk membuat tugas, yang otomatis mengisi kolom judul, waktu, dan lokasi berdasarkan perintah pengguna.
    /**
    *   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
    
  • Media dan hiburan

    • Permintaan pengguna: "Buat playlist baru dengan album jazz teratas dari tahun ini".
    • Tindakan AppFunction: Pemanggil menjalankan fungsi pembuatan playlist dalam aplikasi musik, yang meneruskan konteks seperti "album jazz teratas untuk tahun 2026" sebagai kueri untuk segera membuat playlist.
    /**
    *   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
    
  • Alur kerja lintas aplikasi

    • Permintaan pengguna: "Temukan resep mi dari email Lisa dan tambahkan bahan-bahannya ke daftar belanja saya".
    • Tindakan AppFunction: Permintaan ini menggunakan fungsi dari beberapa aplikasi. Pertama, pemanggil menggunakan fungsi penelusuran aplikasi email untuk mengambil konten. Kemudian, pemanggil mengekstrak bahan-bahan yang relevan dan memanggil fungsi aplikasi daftar belanja untuk mengisi daftar pengguna.
    /**
    *   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
    
  • Kalender dan penjadwalan

    • Permintaan pengguna: "Tambahkan pesta ulang tahun Ibu ke kalender saya untuk hari Senin depan pukul 18.00".
    • Tindakan AppFunction: Aplikasi agentic yang disetujui memanggil fungsi "buat acara" aplikasi kalender, yang mengurai konteks yang relevan seperti "Senin depan" dan "18.00" untuk membuat entri tanpa pengguna perlu membuka kalender secara manual.
    /**
    *   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
    

Cara kerja AppFunctions

Diagram berikut mengilustrasikan alur umum cara AppFunctions dibagikan oleh aplikasi ke agen dan kemudian dieksekusi. Agen kemungkinan akan mempertimbangkan alat MCP jarak jauh sisi server dan AppFunctions lokal bersama-sama saat menangani permintaan pengguna. Alur mendetail untuk menggunakan AppFunctions lokal adalah sebagai berikut:

  • Deklarasi AppFunction: Aplikasi Android dibuat untuk menggunakan AppFunctions agar fiturnya tersedia, seperti "Buat catatan" atau "Kirim pesan".
  • Pembuatan skema: Library Jetpack AppFunctions membuat file skema XML yang mencantumkan semua AppFunctions yang dideklarasikan dalam aplikasi. Android OS menggunakan file ini untuk mengindeks AppFunctions yang tersedia.
  • Pengambilan metadata: Agen dapat mengambil metadata AppFunction dengan membuat kueri.
  • Pemilihan dan eksekusi AppFunction: Berdasarkan perintah pengguna, agen memilih dan menjalankan AppFunction yang sesuai dengan parameter yang sesuai.
Alur AppFunctions umum dari eksposur aplikasi hingga eksekusi agen.
Gambar 1: Alur umum cara AppFunctions diekspos dan kemudian dieksekusi oleh agen.

Library Jetpack AppFunctions menyederhanakan cara mengekspos fungsi aplikasi. Dengan pemroses anotasi, Anda dapat menganotasi fungsi yang ingin disediakan untuk agen. Pemanggil kemudian dapat menemukan dan memanggil fungsi yang diindeks ini menggunakan AppFunctionManager.

Sebelum memanggil fungsi, pemanggil harus memverifikasi bahwa perangkat mendukung fitur AppFunctions dengan mencoba mengambil instance AppFunctionManager. Setelah didukung, pemanggil dapat memverifikasi apakah fungsi tertentu diaktifkan dalam aplikasi target menggunakan isAppFunctionEnabled(packageName,functionId). Membuat kueri status fungsi dalam paket lain memerlukan android.permission.EXECUTE_APP_FUNCTIONSpermission.

Aplikasi Anda tidak diwajibkan untuk memverifikasi apakah fitur AppFunction didukung atau tidak; hal ini ditangani secara otomatis dalam library Jetpack. Misalnya, AppFunctionManager dapat memverifikasi apakah fitur tersebut didukung atau tidak.

Berikut adalah contoh AppFunctions untuk aplikasi pencatat dengan kemampuan untuk membuat, mengedit, dan mencantumkan catatan:

/**
 *   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
)

Sampel, kemampuan, dan agen pengujian

Kami telah menyediakan hal berikut untuk membantu Anda meningkatkan kemampuan dalam AppFunctions:

  • Jelajahi sampel AppFunctions untuk memverifikasi dan mempelajari cara kerja semuanya di perangkat Anda.
  • Kemampuan AppFunctions menemukan dan merekomendasikan fitur aplikasi yang dapat diimplementasikan sebagai AppFunctions. Kemampuan ini juga dapat mengimplementasikan dan menyempurnakan AppFunctions yang ada untuk Anda.
  • Untuk menguji end-to-end, gunakan aplikasi agen sampel.

Pertanyaan Umum (FAQ)

Bagian berikut menjawab pertanyaan umum (FAQ) tentang AppFunctions.

Saya seorang developer aplikasi. Dapatkah saya mengimplementasikan AppFunctions hari ini?

Ya, Anda dapat mengimplementasikan dan menguji AppFunctions dalam aplikasi dengan mengikuti panduan yang dijelaskan di bagian sebelumnya.

Apa perbedaan antara AppFunctions dan MCP?

Keduanya memungkinkan agen AI mengatur alat, tetapi memiliki perbedaan yang signifikan dalam arsitektur, latensi, dan upaya developer yang diperlukan. AppFunctions adalah hook tingkat OS bawaan yang eksklusif untuk Android yang dijalankan secara lokal. Sebaliknya, server MCP standar adalah solusi yang tidak bergantung pada platform dan mengandalkan eksekusi cloud dan perjalanan pulang pergi jaringan.

Singkatnya, mengembangkan dengan AppFunctions memungkinkan Anda menggunakan status aplikasi yang ada langsung di perangkat dan tidak mengharuskan Anda mempertahankan layanan di luar aplikasi Android.

Saya telah mengimplementasikan AppFunctions di aplikasi saya. Mengapa agen sistem saya tidak dapat mengaksesnya?

AppFunctions adalah fitur eksperimental. Untuk mengevaluasi kualitas pengalaman secara keseluruhan dengan cermat selama fase eksperimental ini, hanya sejumlah kecil aplikasi dan agen sistem yang dapat mengakses seluruh pipeline.

Bagaimana cara menyiapkan aplikasi untuk ketersediaan umum AppFunctions?

Pertimbangkan fitur aplikasi mana yang ingin Anda ekspos ke otomatisasi agentic. Anda dapat mengimplementasikan AppFunctions di aplikasi. Untuk melakukannya, ikuti langkah-langkah di bagian sebelumnya di halaman ini, dan verifikasi bahwa AppFunctions terdaftar di perangkat dengan memanggil adb shell cmd app_function list-app-functions.

Dapatkah saya mendapatkan akses awal ke pengalaman developer agentic end-to-end?

Kami melakukan Program Akses Awal (EAP) untuk mengaktifkan aplikasi tertentu dalam menguji pengalaman developer end-to-end yang diperlukan untuk meluncurkan AppFunctions ke produksi di Android. Anda dapat mendaftarkan minat untuk mengintegrasikan AppFunctions melalui formulir pendaftaran EAP ini. Dengan mendaftarkan minat, Anda TIDAK otomatis mendapatkan akses ke integrasi lengkap. Kami akan mengirimkan email kepada Anda jika aplikasi Anda dipilih untuk EAP, atau untuk memberi tahu Anda kapan AppFunctions tersedia secara publik.

Bagaimana cara memberikan masukan tentang AppFunctions?

Anda dapat memberikan masukan tentang API dengan mengajukan masalah dan mendaftarkan minat Anda dalam formulir Program Akses Awal.