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 untuk 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 tinggi.
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 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 ) : TaskMedia 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 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 ): PlaylistAlur 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 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> ): ShoppingListKalender 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 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 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.
- Pemilihan dan eksekusi AppFunction: Berdasarkan perintah pengguna, agen memilih dan mengeksekusi AppFunction yang sesuai dengan parameter yang tepat.
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
android.permission.EXECUTE_APP_FUNCTIONSpermission.
Aplikasi Anda tidak diwajibkan untuk memverifikasi apakah fitur AppFunction didukung;
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:
/**
* 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
)
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 secara 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.
Dapatkah 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.