Tworzenie inteligentnych aplikacji na Androida: integracja z systemem inteligentnych funkcji Androida za pomocą funkcji aplikacji
Czas czytania: 6 minut
Witamy z powrotem w serii postów na blogu „Tworzenie inteligentnych aplikacji na Androida”, w której przekształcamy podstawową aplikację na Androida w spersonalizowane, inteligentne i aktywne środowisko. W poprzednim poście omówiliśmy, jak wykorzystać Firebase AI Logic do tworzenia funkcji AI hostowanych w chmurze i hybrydowych.
Tradycyjne interfejsy mobilne doskonale sprawdzają się w przypadku zadań wymagających skupienia i zaangażowania, a system inteligencji Androida wprowadza dodatkowe funkcje, które jeszcze bardziej ułatwiają wykonywanie złożonych działań wieloetapowych. Funkcje aplikacji uzupełniają tradycyjne interfejsy użytkownika i stanowią nowy, skuteczny punkt wejścia: uprzywilejowany agent na urządzeniu może uzyskiwać dostęp do funkcji aplikacji w tle. Może to być szczególnie przydatne, gdy użytkownicy prowadzą samochód, spacerują lub wykonują inne czynności.
Z tego artykułu dowiesz się, jak zaprojektowaliśmy i zintegrowaliśmy te funkcje z naszą aplikacją do planowania podróży JetPacker za pomocą funkcji aplikacji na Androida. Wyjaśnimy, dlaczego wybraliśmy takie funkcje, omówimy specjalistyczne narzędzia, których użyliśmy, aby przyspieszyć rozwój, i przyjrzymy się kodowi, który sprawia, że wszystko działa.
Projektowanie funkcji opartych na AI: podejmowanie decyzji, które mają znaczenie dla użytkowników
Aby wybrać funkcje, które mają być dostępne w systemie inteligentnym, szukaliśmy zadań, w przypadku których polecenie głosowe lub tekstowe jest obiektywnie szybsze niż klikanie ekranów. Na tym nagraniu ekranu obok siebie widać ten kontrast: po lewej stronie użytkownik przechodzi przez wiele ekranów, aby zarejestrować wydatek, a po prawej stronie to samo zadanie jest wykonywane natychmiast w tle przez uprzywilejowanego agenta.
Pierwszym wyborem było śledzenie wydatków. Zalogowanie wydatku na kawę podczas podróży zwykle wymaga kilku kliknięć – odblokowania telefonu, otwarcia aplikacji, znalezienia aktywnej podróży, przejścia do karty wydatków, kliknięcia przycisku dodawania, zrobienia zdjęcia paragonu i sprawdzenia wyniku. Dzięki udostępnieniu funkcji addExpense i getExpenses jako AppFunctions systemowy agent wykonuje większość pracy. Gdy użytkownik powie „Dodaj do mojej podróży do Paryża wydatek na kawę w wysokości 5 zł”, agent automatycznie wyszuka w tle prawidłowy identyfikator podróży i doda wydatek, całkowicie pomijając ręczny przepływ interfejsu.
Priorytetem było też zarządzanie planem podróży. Znalezienie kolejnej aktywności w intensywnym planie podróży zwykle wymaga przewijania gęstego widoku osi czasu. Dzięki podaniu systemowi getItinerary i addItineraryEvent użytkownik może po prostu zapytać „Co będę robić dalej w Paryżu?” i od razu otrzymać odpowiedź.
Skupiliśmy się też na robieniu notatek bez użycia rąk. Wpisywanie przypomnień lub notatek podczas spaceru po ruchliwej ulicy jest trudne i niebezpieczne. Udostępnienie funkcji notatki głosowej umożliwia użytkownikowi powiedzenie: „Lot był niesamowity, widziałem piękny zachód słońca i udało mi się dobrze wyspać”. Uprzywilejowany agent automatycznie transkrybuje i zapisuje tę informację bezpośrednio w bazie danych podróży za pomocą funkcji addVoiceNote.
Android MCP z technologią AppFunctions
Cała ta funkcja jest oparta na platformie MCP na Androida. W tym modelu aplikacja działa jako lokalny serwer MCP. Zamiast zdalnych interfejsów API udostępniasz funkcje aplikacji bezpośrednio systemowi inteligencji na urządzeniu.
Android AppFunctions to interfejs API, który realizuje tę koncepcję. Odczytuje ona funkcje Kotlin z adnotacjami i kompiluje je w bezpieczne definicje narzędzi, które mogą być wykrywane przez agenta z uprawnieniami i wywoływane lokalnie na urządzeniu.
W modelu MCP na Androidzie Twoja aplikacja działa jako lokalny serwer MCP, który udostępnia narzędzia strukturalne, a platforma Androida pełni funkcję centralnego rejestru narzędzi. Po stronie klienta MCP aplikacje agenta są rejestrowane w systemie analitycznym po przyznaniu im uprawnień systemowych do uzyskiwania dostępu do rejestru.
Gdy użytkownik wchodzi w interakcję z zarejestrowanym agentem, jego LLM określa, czy żądanie może zostać obsłużone przez AppFunction, wysyła zapytanie do metadanych platformy i wykonuje w tle odpowiednie zarejestrowane funkcje. Ta lokalna architektura klient-serwer MCP zapewnia pełną kontrolę: możesz wybrać, które funkcje są dostępne dla agenta, zachowując prywatność pozostałych danych aplikacji.
Jak przyspieszyliśmy rozwój dzięki umiejętnościom w zakresie Androida
Aby usprawnić proces integracji, wykorzystaliśmy umiejętność programowania funkcji aplikacji. Umiejętność programowania AppFunctions to kompleksowe narzędzie dla deweloperów. Przeprowadził nas przez cały cykl życia: mapowanie klas danych Kotlin w celu serializacji parametrów, generowanie niezbędnych punktów wejścia Service, ulepszanie dokumentacji KDoc, aby zapewnić, że LLM rozumie granice parametrów, oraz konfigurowanie automatycznych testów za pomocą ADB.
Udostępnianie funkcji aplikacji systemowi AI
Dość teorii, przejdźmy do implementacji.
Konfiguracja i konfigurowanie zależności
Zaczynamy od dodania zależności AppFunctions. Jeden dla interfejsu API, a drugi dla kompilatora Kotlin Symbol Processing.
implementation("androidx.appfunctions:appfunctions:1.0.0-alpha10")
ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha10")Modelowanie niestandardowych typów danych
Każdy obiekt niestandardowy wymieniany z agentem musi być oznaczony symbolem @AppFunctionSerializable. W pliku TripSerializable.kt definiujemy model danych o podróży:
@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>, )
Udostępnianie funkcji za pomocą adnotacji @AppFunction
Następnie umiejętność napisała funkcje w języku Kotlin, które wykonują zapytania do bazy danych, i oznaczyła je adnotacjami @AppFunction. Możemy to sprawdzić w wyszukiwarce searchTrip:
/** * 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 }
Funkcje AppFunctions działają domyślnie w wątku UI, dlatego używamy withContext(Dispatchers.IO), aby przełączyć się na dyspozytor w tle. Dodatkowo dopracowujemy dokumentację KDoc, aby używać jasnych, trybu rozkazującego i określać ograniczenia parametrów. Dokumentacja jest kompilowana bezpośrednio do schematu narzędzia, którego uprzywilejowany agent używa do rozwiązywania problemów z parametrami i obsługi błędów w czasie działania.
Punkt wejścia usługi i integracja z Hilt
Aby zarejestrować te funkcje w systemie inteligentnym, tworzymy abstrakcyjną klasę bazową, która rozszerza klasę AppFunctionService. Oznaczamy go symbolem @AppFunctionServiceEntryPoint:
@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... }
Podczas kompilacji KSP generuje końcową konkretną podklasę usługi, JetPackerAppFunctionService, zadeklarowaną za pomocą parametru serviceName. Rejestrujemy też app_metadata.xml w pliku manifestu aplikacji. Ten plik zawiera globalne reguły operacyjne dotyczące zadeklarowanych funkcji aplikacji JetPacker.
Testowanie i weryfikowanie funkcji aplikacji
Po wdrożeniu sprawdź, czy funkcje aplikacji są zarejestrowane i działają prawidłowo.
Na urządzeniach lub emulatorach z Androidem 17 lub nowszym możesz używać poleceń ADB z terminala, aby wyświetlać listę funkcji i je wywoływać. Uruchomienie polecenia adb shell cmd app_function list-app-functions wyświetli wszystkie zarejestrowane funkcje pakietu. Następnie możesz wykonać konkretną funkcję i przetestować jej integrację z bazą danych, uruchamiając adb shell cmd app_function execute-app-function i przekazując ciąg znaków z nieprzetworzonymi parametrami JSON.
Zamiast tych poleceń ADB możesz też użyć agenta testowania funkcji aplikacji, aby sprawdzić konfigurację, wyświetlić listę funkcji aplikacji i je wykonać, a nawet zobaczyć, jak działają w rzeczywistym przepływie konwersacji.
Podsumowanie
Myśląc o funkcjach aplikacji, które można udostępnić systemowi AI za pomocą AppFunctions, musimy nieco zmienić sposób myślenia o kodzie i dokumentacji. Funkcje aplikacji umożliwiają korzystanie z tego nowego modelu interakcji w przypadku aplikacji, co pozwala na używanie agenta do uzyskiwania dostępu do funkcji aplikacji.
Po pierwsze, umiejętność tworzenia funkcji aplikacji to niezbędne narzędzie do zarządzania cyklem życia, które pomaga odkrywać funkcje, wdrażać i ulepszać funkcje aplikacji. Po drugie, komentarze KDoc są skompilowanym zasobem API, a jasne opisy parametrów mają bezpośredni wpływ na dokładność działania agenta systemu. Android MCP zapewnia lokalne wykonywanie, dzięki czemu aplikacje mogą bezpiecznie współpracować z agentami AI.
Udostępnianie funkcji aplikacji za pomocą AppFunctions sprawia, że aplikacja jest gotowa do działania w systemie inteligentnym. Opowiedz nam, jak dostosowujesz swoje aplikacje do ery agentów.
Więcej informacji
Zapoznaj się z pozostałymi częściami tej serii postów na blogu:
Część 1: wprowadzenie do aplikacji i ogólny opis.
Część 2: inteligencja na urządzeniu. Poznaj szczegółowo interfejsy API GenAI w ML Kit i Gemini Nano, aby tworzyć funkcje skoncentrowane na ochronie prywatności, takie jak podsumowywanie planów podróży, analizowanie paragonów i lokalne przetwarzanie dźwięku.
Część 3: wnioskowanie hybrydowe i w chmurze. Dowiedz się, jak używać Firebase AI Logic do grounding odpowiedzi LLM z użyciem danych z rzeczywistego świata, takich jak Mapy Google i kontekst internetowy.
Część 4 (ten post): Integracja systemów. Integracja z systemem inteligentnych funkcji Androida za pomocą AppFunctions.
Część 5 (wkrótce): przepływy pracy agenta w aplikacji. Rozszerz aplikację o kompleksowego asystenta rezerwacji opartego na A2UI i ADK.
Chcesz dowiedzieć się więcej o tworzeniu aplikacji na Androida? Obserwuj Android Developers w YouTube lub LinkedIn.
Wszystkie fragmenty kodu w tym poście na blogu są objęte tym powiadomieniem o prawach autorskich:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
InstrukcjeWitamy z powrotem w serii postów na blogu „Tworzenie inteligentnych aplikacji na Androida”, w której przekształcamy podstawową aplikację na Androida w spersonalizowane, inteligentne i autonomiczne środowisko. W poprzednim poście przedstawiliśmy Jetpackera, czyli aplikację w wersji demonstracyjnej, której będziemy używać w tej serii.
Caren Chang • Czas czytania: 6 minut -
InstrukcjeWitamy z powrotem w serii postów na blogu „Tworzenie inteligentnych aplikacji na Androida”, w której przekształcamy podstawową aplikację na Androida w spersonalizowane, inteligentne i autonomiczne środowisko.
Thomas Ezan, Jolanda Verhoef, Caren Chang • Czas czytania: 8 minut -
InstrukcjeJetpacker to aplikacja demonstracyjna, którą nasz zespół stworzył od podstaw na tegoroczną konferencję Google I/O (została zbudowana przy użyciu Antigravity). Jetpacker pomaga użytkownikom planować, odkrywać i cieszyć się kolejną wielką przygodą.
Jolanda Verhoef • Czas czytania: 4 min
Otrzymuj co tydzień najnowsze informacje o tworzeniu aplikacji na Androida na swoją skrzynkę odbiorczą.