Ringkasan AppFunctions

AppFunctions adalah API platform Android dengan library Jetpack yang menyertainya untuk menyederhanakan integrasi MCP Android. Fitur ini memungkinkan aplikasi Anda berperilaku seperti server MCP di perangkat, yang menyediakan 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 akan tersedia dalam pratinjau pribadi dengan penguji tepercaya. Anda dapat mulai menyiapkan aplikasi sekarang untuk menggunakan AppFunctions dan alat pengembangan.

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

AppFunction berfungsi sebagai alat yang setara dengan alat di perangkat seluler dalam Model Context Protocol (MCP). Meskipun MCP secara tradisional menstandardisasi cara agen terhubung ke alat sisi server, AppFunctions menyediakan mekanisme yang sama untuk aplikasi Android. Dengan begitu, Anda dapat mengekspos kemampuan aplikasi sebagai "alat" yang dapat diatur, yang dapat ditemukan dan dieksekusi oleh aplikasi yang diotorisasi (pemanggil) untuk memenuhi maksud pengguna. Pemanggil harus memiliki izin EXECUTE_APP_FUNCTIONS untuk menemukan dan mengeksekusi AppFunction, 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 menyelesaikan tujuan yang kompleks menggunakan bahasa alami, yang sering kali menggantikan kebutuhan navigasi manual langkah demi langkah dengan UI Anda.

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

  • Pengelolaan tugas dan produktivitas

    • Permintaan pengguna: "Ingatkan saya untuk mengambil paket di kantor hari ini pukul 17.00".
    • Tindakan AppFunction: Pemanggil mengidentifikasi aplikasi pengelolaan tugas yang relevan dan memanggil fungsi untuk membuat tugas, dengan otomatis mengisi kolom judul, waktu, dan lokasi berdasarkan perintah pengguna.

    /**
     * Create a new task or reminder with a title, due time, and location.
     *
     * @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(
        title: String,
        dueDateTime: LocalDateTime? = null,
        location: String? = null,
    ): Task = TODO()

  • Media dan hiburan

    • Permintaan pengguna: "Buat playlist baru dengan album jazz teratas tahun ini".
    • Tindakan AppFunction: Pemanggil menjalankan fungsi pembuatan playlist dalam aplikasi musik, meneruskan konteks seperti "album jazz teratas tahun 2026" sebagai kueri untuk segera membuat playlist.

    /**
     * Create a new music playlist based on a natural language query.
     *
     * @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(
        query: String,
    ): Playlist = TODO()

  • 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, ekstrak bahan-bahan yang relevan dan panggil fungsi aplikasi daftar belanja untuk mengisi daftar pengguna.

    /**
     * Search for emails matching a query or sender name to retrieve content like recipes.
     *
     * @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(
        query: String,
    ): List<EmailSummary> = TODO()
    
    /**
     * Add a list of items or ingredients to the user's active shopping list.
     *
     * @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(
        items: List<String>,
    ): ShoppingList = TODO()

  • Kalender dan penjadwalan

    • Permintaan pengguna: "Tambahkan pesta ulang tahun Ibu ke kalender saya untuk Senin depan pukul 18.00".
    • Tindakan AppFunction: Aplikasi agentik yang disetujui memanggil fungsi "buat acara" aplikasi kalender, mengurai konteks yang relevan seperti "Senin depan" dan "pukul 18.00" untuk membuat entri tanpa pengguna perlu membuka kalender secara manual.

    /**
     * Schedule a new event on the user's primary calendar.
     *
     * @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(
        title: String,
        startDateTime: LocalDateTime,
    ): Event = TODO()

Cara kerja AppFunctions

Diagram berikut mengilustrasikan alur umum cara AppFunction dibagikan oleh aplikasi ke agen dan kemudian dieksekusi. Agen cenderung mempertimbangkan alat MCP jarak jauh sisi server dan AppFunction lokal secara bersamaan 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 AppFunction yang dideklarasikan di aplikasi. Android OS menggunakan file ini untuk mengindeks AppFunction yang tersedia.
  • Pengambilan metadata: Agen dapat mengambil metadata AppFunction dengan mengirimkan kueri. Selain KDocs khusus fungsi, developer dapat menentukan pola dan batasan operasional tingkat aplikasi dalam metadata aplikasi untuk memandu orkestrasi agen di beberapa alat.
  • Pemilihan dan eksekusi AppFunction: Berdasarkan perintah pengguna, agen memilih dan mengeksekusi AppFunction yang sesuai dengan parameter yang tepat.
Alur AppFunctions umum dari eksposur aplikasi hingga eksekusi agen.
Gambar 1: Alur umum cara AppFunction diekspos dan selanjutnya dieksekusi oleh agen.

Library Jetpack AppFunctions menyederhanakan pemaparan fungsi aplikasi Anda. Dengan pemroses anotasi, Anda dapat menganotasi fungsi yang ingin Anda sediakan 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). Mengueri status fungsi dalam paket lain memerlukan izin android.permission.EXECUTE_APP_FUNCTIONS.

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 didukung atau tidak.

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

@RequiresApi(36)
@AndroidEntryPoint
@AppFunctionServiceEntryPoint(
    serviceName = "TaskAppFunctionService",
    appFunctionXmlFileName = "task_app_function_service",
)
abstract class BaseTaskAppFunctionService : AppFunctionService() {
    @Inject internal lateinit var taskRepository: TaskRepository

    /**
     * Creates a task based on [createTaskParams].
     *
     * @param createTaskParams The parameter to describe how to create the task.
     */
    @AppFunction(isDescribedByKDoc = true)
    suspend fun createTask(
        createTaskParams: CreateTaskParams,
    ): Task = withContext(Dispatchers.IO) {
        // Developers can use predefined exceptions to let the agent know
        // why it failed.
        if (createTaskParams.title == null && createTaskParams.content == null) {
            throw AppFunctionInvalidArgumentException("Title or content should be non-null")
        }

        val id = taskRepository.createTask(
            createTaskParams.title,
            createTaskParams.content
        )

        return@withContext taskRepository
            .getTask(id)
            ?.toTask()
            ?: throw AppFunctionElementNotFoundException("Task not found for ID = $id")
    }

    // Maps internal TaskEntity
    private fun TaskEntity.toTask() = Task(id = id, title = title, content = description)
}

/** The parameter to create the task. */
@AppFunctionSerializable(isDescribedByKDoc = true)
data class CreateTaskParams(
    /** The title of the task. */
    val title: String?,
    /** The content of the task. */
    val content: String?,
)

/** The user-created task. */
@AppFunctionSerializable(isDescribedByKDoc = true)
data class Task(
    /** The ID of the task. */
    val id: String,
    /** The title of the task. */
    val title: String,
    /** The content of the task. */
    val content: String,
)

Contoh, keterampilan, dan alat pengujian

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

  • Pelajari contoh AppFunctions untuk memverifikasi dan mempelajari cara kerja semuanya di perangkat Anda.
  • Gunakan keterampilan agen AppFunctions untuk mempercepat pengembangan di seluruh siklus proses empat langkah:
    • Penemuan: Menganalisis codebase Anda untuk mengidentifikasi dan merekomendasikan fitur bernilai tinggi untuk orkestrasi AI.
    • Implementasi & Konfigurasi: Buat implementasi Kotlin dan konfigurasi metadata sistem dan bangun dependensi.
    • Penyempurnaan KDoc: Mengoptimalkan dokumentasi fungsi dan properti untuk agen AI dan MCP Android.
    • Pengujian & Pen-debug-an: Menyediakan perintah ADB untuk evaluasi lokal dan pen-debug-an di perangkat.
  • Untuk pengujian dan verifikasi command line, gunakan perintah ADB seperti adb shell cmd app_function ... sebagai cara langsung dan ringan untuk menguji pendaftaran fungsi, memeriksa deskripsi metadata, dan menjalankan fungsi di perangkat.
  • Untuk merasakan Android MCP beraksi dan menguji alur kerja end-to-end tanpa memerlukan perintah apa pun, instal dan gunakan aplikasi Android agen pengujian AppFunctions di perangkat Anda.

Pertanyaan Umum (FAQ)

Bagian berikut menjawab pertanyaan umum (FAQ) tentang AppFunctions.

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

Ya, Anda dapat menerapkan 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 signifikan dalam arsitektur, latensi, dan upaya developer yang diperlukan. AppFunction adalah hook tingkat OS bawaan yang eksklusif untuk Android yang dieksekusi secara lokal. Sebaliknya, server MCP standar adalah solusi lintas platform yang mengandalkan eksekusi cloud dan perjalanan pulang pergi jaringan.

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

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

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

Bagaimana cara menyiapkan aplikasi saya untuk ketersediaan umum AppFunctions?

Pertimbangkan fitur aplikasi mana yang ingin Anda ekspos ke otomatisasi berbasis agen. Anda dapat menerapkan AppFunctions di aplikasi Anda. 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.

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

Kami sedang mengadakan 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 jika aplikasi Anda dipilih untuk EAP, atau untuk memberi tahu Anda saat 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.