Nasıl yapılır? rehberleri

Akıllı Android uygulamaları geliştirme: AppFunctions'ı kullanarak Android'in akıllı sistemine entegre etme

Okuma süresi 6 dakika
Ben Weiss'ın profilini görüntüleme
Ben Weiss Geliştirici İlişkileri Mühendisi

Temel bir Android uygulamasını kişiselleştirilmiş, akıllı ve etkileşimli bir deneyime dönüştürdüğümüz "Akıllı Android uygulamaları geliştirme" başlıklı blog yayını serisine tekrar hoş geldiniz. Önceki yayınımızda, bulutta barındırılan ve hibrit yapay zeka özellikleri oluşturmak için Firebase AI Logic'ten nasıl yararlanılacağını ele almıştık.

Geleneksel mobil kullanıcı arayüzleri, odaklanarak yapılan ve uygulamalı görevlerde başarılıdır. Android zeka sistemi ise karmaşık ve çok adımlı işlemleri daha da kolaylaştırmak için tamamlayıcı özellikler sunar. AppFunctions, geleneksel kullanıcı arayüzlerini tamamlayarak güçlü bir yeni giriş noktası sunar: Cihazdaki ayrıcalıklı bir aracı, uygulama özelliklerine arka planda erişebilir. Bu özellik, özellikle kullanıcılar araba kullanırken, yürürken veya başka bir görevle uğraşırken yararlı olabilir.

Bu makalede, Android AppFunctions'ı kullanarak bu özellikleri nasıl tasarladığımızı ve seyahat planlama uygulamamız JetPacker'a nasıl entegre ettiğimizi göstereceğiz. Özellik seçimlerimizin gerekçesini, geliştirmeyi hızlandırmak için kullandığımız özel araçları ve tüm bunların çalışmasını sağlayan kodu inceleyeceğiz.

Yapay zekaya hazır özellikler tasarlama: Kullanıcılarınız için önemli seçimler yapma

Hangi özelliklerin yapay zeka sistemine sunulacağını belirlemek için sesli veya metin komutunun ekranlara dokunmaktan daha hızlı olduğu görevleri araştırdık. Bu yan yana ekran kaydında, bu karşıtlığı mükemmel bir şekilde görebilirsiniz: Solda, bir kullanıcının harcama kaydetmek için birden fazla ekrana dokunduğu; sağda ise aynı görevin ayrıcalıklı bir temsilci aracılığıyla arka planda anında tamamlandığı görülüyor.

İlk tercihimiz gider takibi oldu. Seyahat sırasında kahve harcamasını kaydetmek için genellikle birkaç kez dokunmak gerekir: Telefonun kilidini açma, uygulamayı açma, etkin seyahati bulma, harcamalar sekmesine gitme, ekle düğmesine dokunma, fişin fotoğrafını çekme ve sonucu kontrol etme. addExpense ve getExpenses özelliklerini AppFunctions olarak sunarak sistem aracısının ağır işleri yapmasını sağlayabilirsiniz. Kullanıcı "Paris gezime beş dolarlık kahve gideri ekle" dediğinde aracı, arka planda doğru gezi kimliğini otomatik olarak arar ve gideri ekler. Böylece, manuel kullanıcı arayüzü akışı tamamen atlanır.

Ayrıca seyahat planı yönetimine de öncelik verdik. Yoğun bir seyahat planında bir sonraki etkinliğin ne olduğunu bulmak genellikle yoğun bir zaman çizelgesi görünümünde gezinmeyi gerektirir. Kullanıcı, sisteme getItinerary ve addItineraryEvent bilgilerini sağlayarak "Paris'te sırada ne var?" diye sorabilir ve anında yanıt alabilir.

Son olarak, eller serbest not alma özelliğine odaklandık. Yoğun bir caddede yürürken hatırlatıcı veya not yazmak zor ve tehlikelidir. Sesli not özelliğini kullanıma sunarak kullanıcının "Uçuş harikaydı, gün batımını izledim ve iyi uyudum" demesine olanak tanıyabilirsiniz. Ayrıcalıklı aracı, addVoiceNote AppFunction'ı kullanarak bu notu otomatik olarak yazıya döker ve doğrudan seyahat veritabanına kaydeder.

Android MCP powered by AppFunctions

Bu deneyimin tamamı Android MCP üzerinde oluşturulmuştur. Bu tasarımda uygulama, yerel bir MCP sunucusu olarak işlev görür. Uygulama özelliklerinizi uzak API'ler yerine doğrudan cihaz üzerindeki yapay zeka sistemine sağlarsınız.

Android AppFunctions, bu konsepti hayata geçiren API'dir. Bu araç, açıklama eklenmiş Kotlin işlevlerini okur ve bunları, ayrıcalıklı aracının cihazda yerel olarak bulup çağırabileceği, tür açısından güvenli ve korumalı alanlı araç tanımlarına derler.

Android MCP diagram.png
Uygulamalarımızı, Android platformunu ve sistem aracılarını vurgulayan diyagram, AppFunctions'ı koordine eder.

Android MCP modelinde uygulamanız, yapılandırılmış araçları kullanıma sunan yerel bir MCP sunucusu olarak işlev görürken Android platformu merkezi araç kayıt defteri olarak görev yapar. MCP istemci tarafında, ajan uygulamaları kayıt otoritesine erişmek için sistem ayrıcalıklı izinler verildikten sonra bilgi sistemiyle kaydedilir.

Bir kullanıcı kayıtlı bir aracıyla etkileşime geçtiğinde, aracının LLM'si isteğin AppFunction tarafından işlenip işlenemeyeceğini belirler, platformun meta verilerini sorgular ve uygun kayıtlı işlevleri arka planda yürütür. Bu yerel MCP istemci-sunucu tasarımı, tam kontrol sahibi olmanızı sağlar: Ajanın hangi özelliklere erişebileceğini tam olarak siz seçersiniz ve uygulamanızın diğer verileri gizli kalır.

Android becerileriyle geliştirme sürecini nasıl hızlandırdık?

Entegrasyon sürecini kolaylaştırmak için AppFunctions geliştirme becerisinden yararlandık. AppFunctions geliştirme becerisi, eksiksiz bir geliştirme yardımcısıdır. Bu araç, tüm yaşam döngüsü boyunca bize yol gösterdi: parametreleri serileştirmek için Kotlin veri sınıflarını eşleme, gerekli Service giriş noktalarını oluşturma, LLM'nin parametre sınırlarını anlamasını sağlamak için KDoc belgelerimizi iyileştirme ve ADB kullanarak otomatik test ayarlama.

Uygulama özelliklerini yapay zeka sistemine sağlama

Teoriyi bir kenara bırakıp uygulamaya geçelim.

Yapılandırma ve bağımlılık kurulumu

Öncelikle AppFunctions bağımlılıklarını ekleyerek başlıyoruz. Biri API, diğeri Kotlin Symbol Processing derleyicisi için.

implementation("androidx.appfunctions:appfunctions:1.0.0-alpha10")
ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha10")

Özel veri türlerini modelleme

Aracıyla değiştirilen tüm özel nesneler @AppFunctionSerializable ile açıklama eklenmelidir. TripSerializable.kt dosyamızda seyahat verileri modelimizi tanımlıyoruz:

@AppFunctionSerializable(isDescribedByKDoc = true)
data class TripSerializable(
    /** The trip's unique identifier. */
    val id: String,
    /** The trip's title. */
    val title: String,
    /** The trip's destination location. */
    val location: String,
    /** The trip's start date in milliseconds. */
    val startDate: Long,
    /** The trip's end date in milliseconds. */
    val endDate: Long,
    /** A list of participants. */
    val participants: List<String>,
)

@AppFunction ek açıklamasını kullanarak özellik sağlama

Ardından, beceri veritabanı sorgularını gerçekleştiren Kotlin işlevlerini yazdı ve bunları @AppFunction ile ek açıklama olarak ekledi. Bunu searchTrip'te görüntüleyebiliriz:

/**
 * Looks for trips based on optional filters like id, title (name), location, and dates.
 *
 * @param id The unique identifier of the trip.
 * @param title The title or name of the trip.
 * @param location The destination location.
 * @param startDate The minimum start date in milliseconds.
 * @param endDate The maximum end date in milliseconds.
 * @return A list of trips matching the filters.
 */
@AppFunction(isDescribedByKDoc = true)
suspend fun searchTrip(
    id: String? = null,
    title: String? = null,
    location: String? = null,
    startDate: Long? = null,
    endDate: Long? = null
): List<TripSerializable> {
    return withContext(Dispatchers.IO) {
    // implementation
}

AppFunctions varsayılan olarak kullanıcı arayüzü iş parçacığında çalıştığından, arka plan dağıtıcıya geçmek için withContext(Dispatchers.IO) kullanırız. Ayrıca, KDoc'umuzu net ve zorunlu fiiller kullanacak şekilde iyileştirip parametre kısıtlamalarını belirtiyoruz. Bu doküman, doğrudan ayrıcalıklı temsilcinin parametreleri çözmek ve çalışma zamanı hatalarını işlemek için kullandığı aracın şemasına derlenir.

Hizmet giriş noktası ve Hilt entegrasyonu

Bu özellikleri yapay zeka sistemine kaydetmek için AppFunctionService öğesini genişleten bir soyut temel sınıf oluştururuz. Bu tür yorumları @AppFunctionServiceEntryPoint ile işaretleriz:

@RequiresApi(36)
@AndroidEntryPoint
@AppFunctionServiceEntryPoint(
    serviceName = "JetPackerAppFunctionService",
    appFunctionXmlFileName = "jetpacker_app_function_service"
)
abstract class BaseJetPackerAppFunctionService : AppFunctionService() {
    @Inject internal lateinit var tripDao: TripDao
    // DAOs and database references are injected here...
}

KSP, derleme sırasında JetPackerAppFunctionService parametresiyle belirtildiği şekilde son somut hizmet alt sınıfını, JetPackerAppFunctionService oluşturur.serviceName Ayrıca, uygulamanın manifestine app_metadata.xml kaydını da ekleriz. Bu dosya, JetPacker'ın beyan ettiği AppFunctions için genel operasyonel kurallar sağlar.

AppFunction'larınızı test etme ve doğrulama

Uyguladıktan sonra AppFunctions'larınızın kaydedildiğini ve doğru şekilde çalıştığını doğrulamanız gerekir.

Android 17 veya daha yeni bir sürümün yüklü olduğu cihazlarda ya da emülatörlerde, işlevlerinizi listelemek ve çağırmak için terminalinizden ADB komutlarını kullanabilirsiniz. adb shell cmd app_function list-app-functions komutu, paketiniz için kayıtlı tüm işlevleri gösterir. Ardından, ham JSON parametreleri dizesi iletirken adb shell cmd app_function execute-app-function komutunu çalıştırarak belirli bir işlevi yürütebilir ve veritabanı entegrasyonunu test edebilirsiniz.

Bu ADB komutları yerine, yapılandırmanızı incelemek, AppFunctions'ı listelemek ve yürütmek, hatta AppFunctions'ınızın gerçek bir sohbet akışında nasıl davrandığını görmek için AppFunctions Testing Agent'ı da kullanabilirsiniz.

Özet

AppFunctions kullanılarak zeka sistemine katkıda bulunabilecek uygulama özellikleri hakkında düşünürken kod ve dokümanlar hakkında düşünme şeklimizde küçük bir değişiklik yapmamız gerekir. AppFunctions, uygulamalar için bu yeni etkileşim modelini kullanmanıza olanak tanır. Bu model, uygulama özelliklerine erişmek için bir aracı kullanmanıza olanak tanır.

İlk olarak, AppFunctions geliştirme becerisi, yaşam döngüsünün önemli bir aracıdır. Uygulamalarınız için AppFunctions'ı keşfetmenize, uygulamanıza ve iyileştirmenize yardımcı olur. İkincisi, KDoc yorumları derlenmiş bir API öğesidir. Net parametre açıklamaları, sistem aracısının yürütme doğruluğunu doğrudan etkiler. Son olarak, Android MCP, uygulamaların yapay zeka aracılarıyla güvenli bir şekilde işbirliği yapmasına olanak tanıyan yerel öncelikli yürütme sağlar.

AppFunctions aracılığıyla uygulama özellikleri eklemek, uygulamanızı zeka sistemine hazır hale getirir. Uygulamalarınızı yapay zeka destekli döneme nasıl uyarladığınızı bize bildirin.

Daha fazla bilgi

Bu blog yayını serisinin diğer bölümlerine göz atın:
1. Bölüm: Uygulamanın tanıtımı ve genel bir bakış.
2. Bölüm: Cihaz üzerinde yapay zeka. Seyahat planı özetleme, makbuz ayrıştırma ve yerel ses işleme gibi gizliliğe öncelik veren özellikler oluşturmak için ML Kit'in üretken yapay zeka API'lerini ve Gemini Nano'yu ayrıntılı olarak inceleyin.
3. Bölüm: Hibrit ve bulut akıl yürütme. LLM yanıtlarını Google Haritalar ve web bağlamı gibi gerçek dünya verilerine dayandırmak için Firebase AI Logic'i nasıl kullanacağınızı keşfedin.
4. Bölüm (bu yayın!): Sistem entegrasyonu. AppFunctions kullanarak Android Intelligence sistemiyle entegrasyon.
5. Bölüm (yakında): Uygulama içi bağımsız iş akışları. Uygulamayı A2UI ve ADK destekli uçtan uca rezervasyon asistanıyla genişletin.

Android geliştirme hakkında daha fazla bilgi edinmek ister misiniz? Android Developers'ı YouTube veya LinkedIn'de takip edin.

Bu blog yayınındaki tüm kod snippet'leri aşağıdaki telif hakkı bildirimine tabidir:

Copyright 2026 Google LLC.
SPDX-License-Identifier: Apache-2.0
Yazan:
Okumaya devam et