AppFunctions, Android MCP entegrasyonunu basitleştirmek için Jetpack kitaplığı ile birlikte gelen bir Android platform API'sidir. Uygulamalarınızın cihaz üzerinde MCP sunucuları gibi davranmasını sağlar. Google Gemini gibi proaktif özellikler, ajanlar ve asistanlar tarafından kullanılacak araçlar olarak işlev gören özellikler sunar. Mayıs 2026 itibarıyla, AppFunctions'ın Gemini ile entegrasyonu, güvenilir test kullanıcılarıyla özel önizleme aşamasındadır. AppFunctions ve geliştirme araçlarını kullanmak için uygulamalarınızı hazırlamaya hemen başlayabilirsiniz.
Bu AppFunction'ları tanımlayarak uygulamanızın Android OS'e yerleştirilmiş kayıt defterine hizmetler, veriler ve işlemler sağlamasına olanak tanırsınız. Böylece kullanıcılar, aracıları ve sistem düzeyindeki etkileşimleri kullanarak 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 iznine sahip olması gerekir. Bu izin, arayanların Gemini gibi aracıları, uygulamaları ve yapay zeka asistanlarını kullanmasına olanak tanır.
AppFunctions, Android 16 veya sonraki sürümlerin yüklü olduğu cihazlarda kullanılabilir.
Örnek kullanım alanları
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 açarak 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.
/** * 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 ) : TaskMedya 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 şarkı listesi oluşturma işlevini çalıştırarak "2026'nın en iyi caz albümleri" gibi bağlam bilgilerini sorgu olarak iletiyor ve şarkı listesini anında oluşturuyor.
/** * 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 ): PlaylistUygulamalar 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 ayıklar ve kullanıcının listesini doldurmak için bir alışveriş listesi uygulamasının işlevini çağırır.
/** * 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> ): ShoppingListTakvim ve planlama
- Kullanıcı isteği: "Annemin doğum günü partisini gelecek pazartesi saat 18:00 için takvimime ekle".
- AppFunction işlemi: Onaylanmış yapay zeka destekli uygulama, takvim uygulamasının "etkinlik oluştur" işlevini çağırarak "gelecek pazartesi" ve "saat 18:00" gibi alakalı bağlamları ayrıştırır. Böylece, kullanıcının takvimi manuel olarak açmasına gerek kalmadan giriş oluşturulur.
/** * 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
AppFunctions'ın işleyiş şekli
Aşağıdaki diyagramda, AppFunction'ların uygulamalar tarafından bir ajana 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'ı kullanmayla ilgili ayrıntılı akış aşağıdaki gibidir:
- AppFunction bildirimi: Android uygulaması, "Not oluştur" veya "Mesaj gönder" gibi özelliklerini kullanıma sunmak için AppFunction'ları kullanacak şekilde geliştirilmiştir.
- Şema oluşturma: AppFunctions Jetpack kitaplığı, uygulamada bildirilen tüm AppFunctions'ı listeleyen bir XML şema dosyası oluşturur. Android OS, kullanılabilir AppFunctions'ı dizine eklemek için bu dosyayı kullanı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çer ve yürütür.
AppFunctions Jetpack kitaplığı, uygulamanızın işlevlerini kullanıma sunmayı kolaylaştırır.
Ek açıklama işleyicisiyle, ajanlara sunmak istediğiniz işlevlere ek açıklama ekleyebilirsiniz. Arayanlar daha sonra AppFunctionManager kullanarak bu dizine eklenmiş işlevleri keşfedip çağırabilir.
Arayanlar, bir işlevi çağırmadan önce AppFunctionManager örneğini almaya çalışarak cihazın AppFunctions özelliğini desteklediğini doğrulamalıdır. Desteklendikten sonra arayanlar, isAppFunctionEnabled(packageName,functionId) kullanarak belirli bir işlevin hedef uygulamada etkin olup olmadığını doğrulayabilir. Diğer paketlerdeki işlevlerin durumunu sorgulamak için android.permission.EXECUTE_APP_FUNCTIONSpermission gerekir.
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ği 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:
/**
* 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
)
Sık sorulan sorular (SSS)
Aşağıdaki bölümde, AppFunctions hakkında sık sorulan sorular ele alınmaktadır.
Uygulama geliştiriciyim. AppFunctions'ı bugün uygulayabilir miyim?
Evet, önceki bölümlerde ayrıntılı olarak açıklanan yönergeleri uygulayarak AppFunctions'ı uygulamanıza entegre edip test edebilirsiniz.
AppFunctions ile MCP arasındaki fark nedir?
Her ikisi de yapay zeka ajanlarının araçları düzenlemesine olanak tanır ancak mimari, gecikme ve geliştiricinin harcaması gereken çaba açısından önemli farklılıklar vardır. AppFunctions, yalnızca Android'e özel, yerel olarak yürütülen yerleşik işletim sistemi düzeyinde kancalardır. Buna karşılık, standart bir MCP sunucusu, bulut yürütmesine ve ağ gidiş dönüşlerine dayanan platformdan bağımsız bir çözümdür.
Kısacası, AppFunctions ile geliştirme yaparken mevcut uygulama durumunu doğrudan cihaz üzerinde kullanabilir ve Android uygulamanızın dışında hizmetler sürdürmeniz gerekmez.
Uygulamamda AppFunctions'ı uyguladım. Sistem aracım neden bunlara erişemiyor?
AppFunctions deneysel bir özelliktir. Bu deneysel aşamada genel deneyimin kalitesini dikkatli bir şekilde değerlendirmek için yalnızca sınırlı sayıda uygulama ve sistem aracısı tüm işlem hattına erişebilir.
Uygulamamı AppFunctions'ın genel kullanıma sunulma tarihine nasıl hazırlayabilirim?
Uygulamanızın hangi özelliklerini yapay zeka destekli otomasyona açmak istediğinizi belirleyin.
Uygulamanızda AppFunctions'ı uygulayabilirsiniz. Bunun için bu sayfadaki önceki bölümlerde yer alan adımları uygulayın ve adb shell cmd app_function list-app-functions çağrısını yaparak cihazda kayıtlı olduklarını doğrulayın.
Uçtan uca temsilci tabanlı geliştirici deneyimine erken erişim elde edebilir miyim?
Android'de AppFunctions'ı üretime sunmak için gereken uçtan uca geliştirici deneyiminin testinde belirli uygulamaları kullanıma alma amacıyla bir erken erişim programı (EAP) yürütüyoruz. Uygulama işlevlerinizi entegre etmek istediğinizi bu erken erişim programı kayıt formu üzerinden belirtebilirsiniz. İlginizi belirterek entegrasyonun tamamına otomatik olarak erişemezsiniz. Uygulamanız EAP için seçilirse veya AppFunctions herkese açık olarak kullanıma sunulduğunda sizi e-posta ile bilgilendireceğiz.
AppFunctions hakkında nasıl geri bildirimde bulunabilirim?
Sorun bildirerek ve Erken Erişim Programı formunda ilgilendiğinizi belirterek API hakkında geri bildirimde bulunabilirsiniz.