AppFunctions'a genel bakış

AppFunctions, Android uygulamanızın, sistemin ve çeşitli yapay zeka aracıları ile 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'e 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) kullanıcı amaçlarını karşılamak için keşfedip yürütebileceği, düzenlenebilir "araçlar" olarak kullanıma sunabilirsiniz. Arayanların AppFunction'ları keşfetme ve yürütme EXECUTE_APP_FUNCTIONS izni olmalıdır. Bu işlevler arasında aracıları, uygulamaları ve Gemini gibi yapay zeka asistanlarını kullanabilirler.

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 bir 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 çalma listesi oluşturma işlevini yürütür. İçeriği oluşturup hemen başlatmak için sorgu olarak "2026'nın en iyi caz albümleri" gibi bağlamlar 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 ayıklar 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'de 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.

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 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ındaki 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 AppFunction'larını kullanıma sunmak için oluşturulur.
  • Şema oluşturma: AppFunctions Jetpack kitaplığı, uygulamada bildirilen tüm AppFunction'ları listeleyen bir XML şema dosyası oluşturur. Bu dosya, Android OS 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çer ve yürütür.
Uygulama işlevlerinin uygulama gösteriminden aracı yürütmeye kadar olan tipik akışını gösteren diyagram.
Şekil 1: AppFunction'ların nasıl kullanıma sunulduğu ve ardından bir aracı tarafından nasıl yürütüldüğünün tipik akışı.

AppFunctions Jetpack kitaplığı, uygulamanızın işlevlerini kullanıma sunmayı kolaylaştırır. Ek açıklama işleyicisiyle geliştiriciler, kullanıma sunmak istedikleri işlevlere ek açıklama ekler. 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_FUNCTIONS permission 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
)

SSS

Aşağıdaki bölümde, AppFunctions hakkında sık sorulan sorular ele alınmaktadır.

S: Uygulama geliştiriciyim. AppFunctions'ı bugün uygulayabilir miyim?

Y: Evet, önceki bölümlerde ayrıntılı olarak açıklanan yönergeleri uygulayarak AppFunctions'ı uygulamanızda uygulayıp test edebilirsiniz.

S: Uygulamamda AppFunctions'ı uyguladım. Sistem aracım neden bunlara erişemiyor?

Y: 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.

S: Bir temsilci geliştiriyorum. Uygulamalar tarafından sağlanan AppFunctions'a erişebilir miyim?

Y: Test aracınız, geliştirme ortamında AppFunctions'a erişebilir. Bu deneysel aşamada, yalnızca sınırlı sayıda sistem aracısı üretimde AppFunctions'a erişip bunları yürütebilir.

S: Hangi sistem aracıları AppFunctions'a erişebilir?

A: AppFunctions deneysel aşamadayken yalnızca sınırlı sayıda sistem aracısı tüm işlem hattına erişebilir.

S: Uygulamamı AppFunctions'ın genel kullanıma sunulma tarihine nasıl hazırlayabilirim?

Y: Uygulamanızın hangi özelliklerini yapay zeka destekli otomasyona açmak istediğinizi düşünün. 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.

S: Uçtan uca temsilci tabanlı geliştirici deneyimine erken erişim sağlayabilir miyim?

Y: Android'de AppFunctions'ı üretime sunmak için gereken uçtan uca geliştirici deneyimini test eden belirli uygulamaların ilk katılımını sağlamak amacıyla 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.

S: AppFunctions hakkında nasıl geri bildirimde bulunabilirim?

Y: Sorun bildirerek ve Erken Erişim Programı formunda ilgilendiğinizi belirterek API hakkında geri bildirimde bulunabilirsiniz.