기본 Android 앱을 개인화되고 지능적인 에이전트 환경으로 변환하는 블로그 게시물 시리즈 '지능형 Android 앱 빌드'에 다시 오신 것을 환영합니다. 이전 게시물에서는 Firebase AI Logic을 활용하여 클라우드 호스팅 및 하이브리드 AI 기능을 빌드하는 방법을 살펴봤습니다.
기존 모바일 UI는 집중적인 직접 작업에 탁월하며, Android 인텔리전스 시스템은 복잡한 다단계 작업을 더욱 쉽게 처리할 수 있는 보완 기능을 도입하고 있습니다. AppFunctions는 기존 사용자 인터페이스를 보완하여 강력한 새로운 진입점을 제공합니다. 기기의 권한이 있는 에이전트가 백그라운드에서 앱 기능에 액세스할 수 있습니다. 이 기능은 사용자가 운전하거나, 걷거나, 멀티태스킹을 할 때 특히 유용합니다.
이 도움말에서는 Android AppFunctions를 사용하여 여행 계획 앱인 JetPacker에 이러한 기능을 설계하고 통합한 방법을 보여줍니다. 기능 선택의 근거를 살펴보고, 개발 속도를 높이는 데 사용한 전문 도구를 논의하고, 모든 것을 작동시키는 코드를 자세히 살펴보겠습니다.
AI 지원 기능 설계: 사용자에게 중요한 선택하기
인텔리전스 시스템에 제공할 기능을 선택하기 위해 Google은 음성 또는 텍스트 명령이 화면을 탭하는 것보다 객관적으로 빠른 작업을 찾았습니다. 이 나란히 배치된 화면 녹화에서 이 대비를 완벽하게 확인할 수 있습니다. 왼쪽에서는 사용자가 여러 화면을 탭하여 비용을 기록하고, 오른쪽에서는 권한이 있는 에이전트를 통해 백그라운드에서 동일한 작업을 즉시 완료합니다.
첫 번째 선택은 비용 추적이었습니다. 여행 중에 커피 비용을 기록하려면 보통 여러 번 탭해야 합니다. 휴대전화 잠금 해제, 앱 열기, 활성 여행 찾기, 비용 탭으로 이동, 추가 버튼 탭, 영수증 사진 촬영, 결과 확인 등의 단계를 거쳐야 합니다. addExpense 및 getExpenses 기능을 AppFunctions로 제공하면 시스템 에이전트가 무거운 작업을 처리합니다. 사용자가 '파리 여행에 5달러짜리 커피 비용을 추가해 줘'라고 말하면 에이전트가 백그라운드에서 올바른 여행 ID를 자동으로 검색하고 비용을 삽입하여 수동 UI 흐름을 완전히 건너뜁니다.
일정 관리에도 우선순위를 두었습니다. 바쁜 여행 일정에서 다음 활동을 찾으려면 일반적으로 밀도 높은 타임라인 뷰를 스크롤해야 합니다. 사용자는 시스템에 getItinerary와 addItineraryEvent를 제공하여 간단히 '파리에서 다음에 뭘 하지?'라고 물어보고 즉시 답변을 받을 수 있습니다.
마지막으로 핸즈프리 메모 캡처에 중점을 두었습니다. 붐비는 거리를 걸으면서 알림이나 메모를 입력하는 것은 어렵고 안전하지 않습니다. 음성 메모 기능을 노출하면 사용자가 '비행이 정말 좋았어. 아름다운 일몰을 봤고 잠도 잘 잤어'라고 말할 수 있으며, 권한이 있는 에이전트는 addVoiceNote AppFunction을 사용하여 이를 자동으로 트랜스크립션하고 여행 데이터베이스에 직접 저장합니다.
AppFunctions로 구동되는 Android MCP
이 전체 환경은 Android MCP를 기반으로 구축됩니다. 이 설계에서 앱은 로컬 MCP 서버 역할을 합니다. 원격 API 대신 앱 기능을 온디바이스 인텔리전스 시스템에 직접 제공합니다.
Android AppFunctions는 이 개념을 구현하는 API입니다. 주석이 달린 Kotlin 함수를 읽고 권한이 있는 에이전트가 기기에서 로컬로 검색하고 호출할 수 있는 유형 안전한 샌드박스 도구 정의로 컴파일합니다.
Android MCP 모델에서 앱은 구조화된 도구를 노출하는 로컬 MCP 서버 역할을 하고 Android 플랫폼은 중앙 도구 레지스트리 역할을 합니다. MCP 클라이언트 측에서 에이전트 앱은 레지스트리에 액세스할 수 있는 시스템 권한이 부여된 후 인텔리전스 시스템에 등록됩니다.
사용자가 등록된 에이전트와 상호작용하면 LLM이 요청을 AppFunction으로 처리할 수 있는지 확인하고, 플랫폼의 메타데이터를 쿼리하고, 적절한 등록된 함수를 백그라운드에서 실행합니다. 이 로컬 MCP 클라이언트-서버 설계를 사용하면 에이전트가 액세스할 수 있는 기능을 정확하게 선택하여 앱의 나머지 데이터를 비공개로 유지하는 등 모든 것을 제어할 수 있습니다.
Android 기술로 개발을 가속화한 방법
통합 프로세스를 간소화하기 위해 AppFunctions 개발 스킬을 활용했습니다. AppFunctions 개발 스킬은 완전한 개발 도우미입니다. 이 가이드에서는 전체 수명 주기를 안내합니다. Kotlin 데이터 클래스를 매핑하여 매개변수를 직렬화하고, 필요한 Service 진입점을 생성하고, LLM이 매개변수 경계를 이해하도록 KDoc 문서를 개선하고, ADB를 사용하여 자동 테스트를 설정합니다.
인텔리전스 시스템에 앱 기능 제공
이론은 충분히 설명했으니 구현을 살펴보겠습니다.
구성 및 종속 항목 설정
먼저 AppFunctions 종속 항목을 추가합니다. 하나는 API용이고 하나는 Kotlin Symbol Processing 컴파일러용입니다.
implementation("androidx.appfunctions:appfunctions:1.0.0-alpha10")
ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha10")맞춤 데이터 유형 모델링
상담사와 교환되는 모든 맞춤 객체에는 @AppFunctionSerializable 주석이 달려 있어야 합니다. TripSerializable.kt 파일에서 이동 데이터 모델을 정의합니다.
@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 주석을 사용하여 기능 제공
그런 다음 스킬은 데이터베이스 쿼리를 실행하는 Kotlin 함수를 작성하고 @AppFunction로 주석을 답니다. 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 }
AppFunctions는 기본적으로 UI 스레드에서 실행되므로 withContext(Dispatchers.IO)를 사용하여 백그라운드 디스패처로 전환합니다. 또한 명확한 명령형 동사를 사용하고 매개변수 제약 조건을 지정하도록 KDoc을 개선합니다. 이 문서는 권한이 있는 에이전트가 매개변수를 확인하고 런타임 오류를 처리하는 데 사용하는 도구의 스키마로 직접 컴파일됩니다.
서비스 진입점 및 Hilt 통합
지능형 시스템에 이러한 기능을 등록하기 위해 AppFunctionService를 확장하는 추상 기본 클래스를 만듭니다. @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... }
컴파일 중에 KSP는 serviceName 매개변수로 선언된 최종 구체 서비스 서브클래스 JetPackerAppFunctionService를 생성합니다. 앱의 매니페스트에도 app_metadata.xml을 등록합니다. 이 파일은 JetPacker의 선언된 AppFunctions에 대한 전역 운영 규칙을 제공합니다.
AppFunctions 테스트 및 확인
구현한 후 AppFunctions가 등록되어 있고 올바르게 작동하는지 확인해야 합니다.
Android 17 이상으로 실행되는 기기 또는 에뮬레이터에서 터미널의 ADB 명령어를 사용하여 함수를 나열하고 호출할 수 있습니다. adb shell cmd app_function list-app-functions을 실행하면 패키지에 등록된 모든 함수가 표시됩니다. 그런 다음 원시 JSON 매개변수 문자열을 전달하면서 adb shell cmd app_function execute-app-function를 실행하여 특정 함수를 실행하고 데이터베이스 통합을 테스트할 수 있습니다.
이러한 ADB 명령어 대신 AppFunctions 테스트 에이전트를 사용하여 구성을 검사하고, AppFunctions를 나열하고 실행하며, 실제 대화 흐름에서 AppFunctions가 어떻게 작동하는지 확인할 수도 있습니다.
결론
AppFunctions를 사용하여 인텔리전스 시스템에 기여할 수 있는 앱 기능을 고려할 때는 코드와 문서에 대한 생각을 약간 바꿔야 합니다. AppFunctions를 사용하면 앱에 이 새로운 상호작용 모델을 사용할 수 있으며, 이를 통해 에이전트를 사용하여 앱 기능에 액세스할 수 있습니다.
첫째, AppFunctions 개발 기술은 필수 수명 주기 도구로, 앱의 기능을 발견하고 앱의 AppFunctions를 구현하고 개선하는 데 도움이 됩니다. 둘째, KDoc 주석은 컴파일된 API 애셋입니다. 명확한 매개변수 설명은 시스템 에이전트의 실행 정확도에 직접적인 영향을 미칩니다. 마지막으로 Android MCP는 앱이 AI 에이전트와 안전하게 공동작업할 수 있도록 로컬 우선 실행을 제공합니다.
AppFunctions를 통해 앱 기능을 제공하면 애플리케이션이 인텔리전스 시스템에 대비할 수 있습니다. 에이전트 시대에 맞게 앱을 어떻게 적응시키고 있는지 알려주세요.
자세히 알아보기
이 블로그 게시물 시리즈의 다른 부분을 확인하세요.
1부: 앱 소개 및 개요
2부: 온디바이스 인텔리전스 ML Kit의 생성형 AI API와 Gemini Nano를 자세히 살펴보고 여행 일정 요약, 영수증 파싱, 로컬 오디오 처리와 같은 개인 정보 보호 우선 기능을 빌드합니다.
3부: 하이브리드 및 클라우드 추론 Firebase AI Logic을 사용하여 LLM 대답을 Google 지도 및 웹 컨텍스트와 같은 실제 데이터에 그라운딩하는 방법을 알아봅니다.
4부 (이 게시물): 시스템 통합 AppFunctions를 사용하여 Android 인텔리전스 시스템과 통합
5부 (출시 예정): 인앱 에이전트 워크플로 A2UI 및 ADK로 구동되는 엔드 투 엔드 예약 어시스턴트로 앱을 확장합니다.
Android 개발에 대해 자세히 알아보고 싶으신가요? YouTube 또는 LinkedIn에서 Android 개발자를 팔로우하세요.
이 블로그 게시물의 모든 코드 스니펫에는 다음 저작권 고지가 적용됩니다.
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
방법기본 Android 앱을 맞춤형의 지능적인 에이전트 환경으로 변환하는 블로그 게시물 시리즈 '지능형 Android 앱 빌드'에 다시 오신 것을 환영합니다. 이전 게시물에서는 이 시리즈 전체에서 사용할 데모 앱인 Jetpacker를 소개했습니다.
Caren Chang • 전문 길이: 6분 -
방법기본 Android 앱을 맞춤형의 지능적인 에이전트 환경으로 변환하는 블로그 게시물 시리즈 '지능형 Android 앱 빌드'에 다시 오신 것을 환영합니다.
Thomas Ezan, Jolanda Verhoef, Caren Chang • 전문 길이: 8분 -
방법Jetpacker는 올해 Google I/O를 위해 Google 팀이 처음부터 구축한 기술 쇼케이스 앱입니다 (Antigravity를 사용하여 빌드됨). Jetpacker는 사용자가 다음 모험을 계획하고, 탐색하고, 즐길 수 있도록 지원합니다.
Jolanda Verhoef • 4분 읽음
Android 개발 관련 최신 정보를 이메일로 받아 보세요.