AppFunctions memungkinkan aplikasi Android Anda membagikan bagian fungsionalitas tertentu yang dapat ditemukan dan dipanggil oleh sistem serta berbagai agen dan asisten AI. Dengan menentukan fungsi ini, Anda memungkinkan aplikasi Anda menyediakan layanan, data, dan tindakan ke OS Android, sehingga pengguna dapat menyelesaikan tugas melalui agen AI 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 dan ditemukan serta dieksekusi oleh aplikasi (pemanggil) yang diberi otorisasi untuk memenuhi maksud pengguna. Pemanggil harus memiliki izin
EXECUTE_APP_FUNCTIONS untuk menemukan dan mengeksekusi AppFunction,
serta dapat menyertakan agen, aplikasi, dan asisten AI seperti Gemini.
AppFunctions berfungsi dengan 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 mengekspos kemampuan aplikasi, Anda memungkinkan pengguna menyelesaikan tujuan yang kompleks menggunakan bahasa alami, sehingga sering kali tidak perlu 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.
- 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, dengan meneruskan konteks seperti "album jazz teratas untuk tahun 2026" sebagai kueri untuk membuat dan meluncurkan konten secara langsung.
- 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, bahan-bahan yang relevan akan diekstrak dan fungsi aplikasi daftar belanja akan dipanggil untuk mengisi daftar pengguna.
- 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.
Cara kerja AppFunctions
AppFunctions adalah fitur platform Android 16 dan library Jetpack pendamping yang memungkinkan aplikasi mengekspos fungsi tertentu agar pemanggil, seperti aplikasi agen, dapat mengakses dan mengeksekusinya di perangkat.
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 mengekspos AppFunction-nya, seperti "Buat Catatan" atau "Kirim Pesan".
- Pembuatan skema: Library AppFunctions Jetpack membuat file skema XML yang mencantumkan semua AppFunction yang dideklarasikan di aplikasi. File ini digunakan oleh Android OS untuk mengindeks AppFunction yang tersedia.
- Pengambilan metadata: Agen dapat mengambil metadata AppFunction dengan mengajukan kueri.
- Pemilihan dan eksekusi AppFunction: Berdasarkan perintah pengguna, agen akan memilih dan mengeksekusi AppFunction yang sesuai dengan parameter yang sesuai.
Library Jetpack AppFunctions menyederhanakan pemaparan fungsi aplikasi Anda.
Dengan pemroses anotasi, developer menganotasi fungsi yang ingin
diekspos. Kemudian, pemanggil dapat menemukan dan memanggil fungsi yang diindeks ini menggunakan
AppFunctionManager.
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 adalah contoh AppFunctions untuk aplikasi pencatatan dengan kemampuan untuk membuat, mengedit, dan mencantumkan catatan.
class NoteFunctions(
private val noteRepository: NoteRepository
) {
/**
* A note.
*
* @param id The note's ID.
* @param title The note's title.
* @param content The note's content.
*/
@AppFunctionSerializable(isDescribedByKDoc = true)
data class Note(val id: Int, val title: String, val content: String)
/**
* 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 if (noteRepository.appNotes.isEmpty()) null else viewModel.appNotes
}
/**
* 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 new 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: String,
title: String?,
content: String,
): Note? {
return noteRepository.updateNote(noteId, title, content)
}
}