AppFunctions, Android uygulamanızın sistemin, çeşitli yapay zeka aracı ve asistanlarının keşfedip çağırabileceği belirli işlevleri paylaşmasına olanak tanır. Bu işlevleri tanımlayarak uygulamanızın Android OS'ye hizmetler, veriler ve işlemler sunmasını sağlarsınız. Böylece kullanıcılar, yapay zeka aracıları ve sistem düzeyindeki etkileşimler aracılığıyla görevleri tamamlayabilir.
AppFunctions, Model Context Protocol (MCP) içindeki araçların mobil cihazlardaki karşılığıdır. MCP, geleneksel olarak aracıların sunucu tarafı araçlara nasıl bağlanacağını standartlaştırırken AppFunctions, Android uygulamaları için aynı mekanizmayı sağlar. Bu sayede, uygulamanızın özelliklerini, yetkili uygulamaların (arayanlar) keşfedip kullanıcı amaçlarını yerine getirmek için çalıştırabileceği, düzenlenebilir "araçlar" olarak kullanıma sunabilirsiniz. Arayanların AppFunction'ları keşfetmek ve yürütmek için EXECUTE_APP_FUNCTIONS izni olmalıdır. Bu izin, aracıları, uygulamaları ve Gemini gibi yapay zeka asistanlarını içerebilir.
AppFunctions, Android 16 veya sonraki sürümlerin yüklü olduğu cihazlarda çalışır.
Kullanım örnekleri
AppFunctions, görevleri otomatikleştirmek ve kullanıcı etkileşimlerini kolaylaştırmak için güçlü bir mekanizma sağlar. Uygulamanızın özelliklerini kullanıma sunarak kullanıcıların doğal dili kullanarak karmaşık hedeflere ulaşmasını sağlarsınız. Bu sayede, kullanıcı arayüzünüzde adım adım manuel gezinme ihtiyacı genellikle ortadan kalkar.
Aşağıdaki senaryolarda, AppFunctions'ın çeşitli uygulama kategorilerinde deneyimleri geliştirmek için nasıl kullanılabileceği gösterilmektedir:
- Görev yönetimi ve üretkenlik
- Kullanıcı isteği: "Bugün saat 17:00'da iş yerinden paketimi almamı hatırlat".
- AppFunction işlemi: Arayan, ilgili görev yönetimi uygulamasını tanımlar ve bir görev oluşturmak için işlevi çağırır. Başlık, zaman ve konum alanları, kullanıcının istemine göre otomatik olarak doldurulur.
- Medya ve eğlence
- Kullanıcı isteği: "Bu yılın en iyi caz albümlerinden oluşan yeni bir oynatma listesi oluştur".
- AppFunction işlemi: Arayan, bir müzik uygulamasında oynatma listesi oluşturma işlevini yürütür. İçeriği oluşturup hemen başlatmak için "2026'nın en iyi caz albümleri" gibi bağlam bilgilerini sorgu olarak iletir.
- Uygulamalar arası iş akışları
- Kullanıcı isteği: "Lisa'nın e-postasındaki noodle tarifini bul ve malzemeleri alışveriş listeme ekle".
- AppFunction işlemi: Bu istekte birden fazla uygulamadaki işlevler kullanılır. Öncelikle arayan kişi, içeriği almak için bir e-posta uygulamasının arama işlevini kullanır. Ardından, ilgili malzemeleri çıkarır ve kullanıcının listesini doldurmak için bir alışveriş listesi uygulamasının işlevini çağırır.
- Takvim ve planlama
- Kullanıcı isteği: "Annemin doğum günü partisini önümüzdeki pazartesi saat 18:00'da takvimime ekle".
- AppFunction işlemi: Onaylanmış yapay zeka uygulaması, takvim uygulamasının "etkinlik oluştur" işlevini çağırır. Kullanıcının takvimi manuel olarak açmasına gerek kalmadan girişi oluşturmak için "gelecek pazartesi" ve "saat 18:00" gibi alakalı bağlamları ayrıştırır.
AppFunctions'ın işleyiş şekli
AppFunctions, Android 16 platform özelliğidir ve uygulamaların, arayanların (ör. temsilci uygulamaları) cihazda erişip yürütmesi için belirli işlevleri kullanıma sunmasına olanak tanıyan bir Jetpack kitaplığıdır.
Aşağıdaki şemada, AppFunction'ların uygulamalar tarafından bir aracıyla nasıl paylaşıldığı ve ardından nasıl yürütüldüğüne dair tipik akış gösterilmektedir. Temsilciler, kullanıcı isteklerini işlerken hem sunucu tarafı uzak MCP araçlarını hem de yerel AppFunctions'ı birlikte değerlendirir. Yerel AppFunctions kullanma ile ilgili ayrıntılı akış aşağıdaki gibidir:
- AppFunction bildirimi: Android uygulaması, "Not Oluştur" veya "Mesaj Gönder" gibi AppFunction'larını gösterecek şekilde oluşturulur.
- Şema oluşturma: AppFunctions Jetpack kitaplığı, uygulamada bildirilen tüm AppFunction'ları listeleyen bir XML şema dosyası oluşturur. Bu dosya, Android işletim sistemi tarafından kullanılabilir AppFunction'ları dizine eklemek için kullanılır.
- Meta veri alma: Aracı, sorgulayarak AppFunction meta verilerini alabilir.
- AppFunction seçimi ve yürütülmesi: Aracı, kullanıcı istemlerine göre uygun AppFunction'ı uygun parametrelerle seçip yürütür.
AppFunctions Jetpack kitaplığı, uygulamanızın işlevlerini kullanıma sunmayı kolaylaştırır.
Ek açıklama işlemcisiyle geliştiriciler, kullanıma sunmak istedikleri işlevlere ek açıklamalar ekler. Arayanlar daha sonra AppFunctionManager kullanarak bu dizine eklenmiş işlevleri keşfedebilir ve çağırabilir.
Uygulamanızın, AppFunction özelliğinin desteklenip desteklenmediğini doğrulaması gerekmez. Bu işlem, Jetpack kitaplığında otomatik olarak yapılır. Örneğin, AppFunctionManager, özelliğin desteklenip desteklenmediğini doğrulayabilir.
Not oluşturma, düzenleme ve listeleme özelliklerine sahip bir not alma uygulaması için AppFunctions örneğini aşağıda bulabilirsiniz.
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)
}
}