Создавайте интеллектуальные приложения для Android: интегрируйте их в интеллектуальную систему Android с помощью AppFunctions.
6 минут чтения
Добро пожаловать обратно в серию статей блога « Создание интеллектуальных приложений для Android », где мы берем обычное приложение для Android и превращаем его в персонализированное, интеллектуальное и управляемое агентом приложение. В нашей предыдущей статье мы рассмотрели, как использовать Firebase AI Logic для создания облачных и гибридных функций искусственного интеллекта.
Традиционные мобильные пользовательские интерфейсы отлично подходят для выполнения целенаправленных, интерактивных задач, а интеллектуальная система Android внедряет дополнительные функции, которые делают сложные многоэтапные действия еще проще. Дополняя традиционные пользовательские интерфейсы, AppFunctions предоставляют мощную новую точку входа: привилегированный агент на устройстве может получать доступ к функциям приложения в фоновом режиме. Это может быть особенно полезно, когда пользователи находятся за рулем, идут пешком или выполняют несколько задач одновременно.
В этой статье мы покажем, как мы разработали и интегрировали эти возможности в наше приложение для планирования путешествий JetPacker , используя Android AppFunctions. Мы рассмотрим обоснование выбора этих функций, обсудим специализированные инструменты, которые мы использовали для ускорения разработки, и углубимся в код, обеспечивающий всю эту работу.
Разработка функций, готовых к использованию ИИ: принятие решений, имеющих значение для ваших пользователей.
Чтобы выбрать, какие функции предоставить интеллектуальной системе, мы искали задачи, где голосовая или текстовая команда объективно быстрее, чем перелистывание страниц. На этом видео, где показаны два экрана, этот контраст виден идеально: слева — пользователь перелистывает несколько экранов для регистрации расходов; справа — та же задача, мгновенно выполненная в фоновом режиме привилегированным агентом.
Наш первый выбор пал на отслеживание расходов. Регистрация расходов на кофе во время поездки обычно требует нескольких действий: разблокировка телефона, открытие приложения, поиск активной поездки, переход на вкладку расходов, нажатие кнопки «Добавить», фотографирование чека и проверка результата. Предоставляя функции addExpense и getExpenses в качестве функций приложения, системный агент берет на себя основную работу. Когда пользователь говорит: «Добавить расходы на кофе в размере пяти долларов к моей поездке в Париж», агент автоматически в фоновом режиме ищет правильный идентификатор поездки и вставляет расходы, полностью минуя ручной ввод данных в пользовательский интерфейс.
Мы также уделили приоритетное внимание управлению маршрутом. Чтобы узнать, какое мероприятие запланировано на ближайшее время в насыщенном графике поездки, обычно приходится прокручивать сложную временную шкалу. Предоставив системе getItinerary и addItineraryEvent , пользователь может просто спросить: «Что я буду делать дальше в Париже?» и получить мгновенный ответ.
Наконец, мы сосредоточились на создании заметок без использования рук. Набирать напоминания или заметки, идя по оживленной улице, сложно и небезопасно. Возможность создания голосовых заметок позволяет пользователю сказать: «Полет был потрясающим, я видел прекрасный закат и хорошо выспался», — и уполномоченный агент автоматически расшифровывает и сохраняет это непосредственно в базе данных путешествий с помощью функции addVoiceNote AppFunction.
Android MCP на базе AppFunctions
Весь этот функционал построен на основе Android MCP. В рамках этой архитектуры приложение выступает в качестве локального MCP-сервера. Вместо удалённых API вы предоставляете функции своего приложения непосредственно интеллектуальной системе на устройстве.
Android AppFunctions — это API, который воплощает эту концепцию в жизнь. Он считывает аннотированные функции Kotlin и компилирует их в типобезопасные, изолированные определения инструментов, которые привилегированный агент может обнаружить и вызвать локально на устройстве.

В модели Android MCP ваше приложение выступает в качестве локального MCP-сервера, предоставляющего доступ к структурированным инструментам, а платформа Android служит центральным реестром инструментов. На стороне клиента MCP агентские приложения регистрируются в интеллектуальной системе после предоставления им привилегированных прав доступа к реестру.
Когда пользователь взаимодействует с зарегистрированным агентом, его LLM определяет, может ли запрос быть обработан функцией приложения, запрашивает метаданные платформы и выполняет соответствующие зарегистрированные функции в фоновом режиме. Такая локальная клиент-серверная архитектура MCP предоставляет вам полный контроль: вы выбираете, какие именно функции доступны агенту, сохраняя при этом конфиденциальность остальных данных вашего приложения.
Как мы ускорили разработку с помощью навыков Android.
Для оптимизации процесса интеграции мы использовали инструмент разработки AppFunctions . AppFunctions — это полноценный помощник в разработке. Он сопровождал нас на протяжении всего жизненного цикла: от сопоставления классов данных Kotlin с сериализуемыми параметрами до генерации необходимых точек входа Service , уточнения нашей документации KDoc , чтобы гарантировать понимание границ параметров в LLM, и настройки автоматизированного тестирования с использованием 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 по умолчанию выполняются в потоке пользовательского интерфейса, мы используем 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 генерирует окончательный конкретный подкласс сервиса, JetPackerAppFunctionService , объявленный с помощью параметра serviceName . Мы также регистрируем файл app_metadata.xml в манифесте приложения. Этот файл предоставляет глобальные правила работы для объявленных функций приложения JetPacker.
Тестирование и проверка функций вашего приложения.
После внедрения необходимо убедиться, что ваши AppFunctions зарегистрированы и работают корректно.
На устройствах или эмуляторах с Android 17 или более поздней версии вы можете использовать команды ADB в терминале для отображения списка и вызова ваших функций. Команда adb shell cmd app_function list-app-functions отобразит все зарегистрированные функции для вашего пакета. Затем вы можете выполнить определенную функцию и проверить ее интеграцию с базой данных, выполнив команду adb shell cmd app_function execute-app-function с передачей строки параметров в формате JSON.
Вместо этих команд ADB вы также можете использовать агент тестирования AppFunctions для проверки вашей конфигурации, перечисления и выполнения функций AppFunctions, а также для просмотра того, как ваши функции AppFunctions ведут себя в реальном диалоговом режиме.
Подводя итоги
При разработке функций приложения, которые можно добавить в интеллектуальную систему с помощью AppFunctions, требуется небольшое изменение в нашем подходе к коду и документации. AppFunctions позволяют использовать новую модель взаимодействия с приложениями, которая дает возможность использовать агента для доступа к функциям приложения.
Во-первых, навык разработки AppFunctions — это важный инструмент жизненного цикла, помогающий вам находить функции, внедрять и совершенствовать AppFunctions для ваших приложений. Во-вторых, комментарии KDoc представляют собой скомпилированный API-ресурс; четкие описания параметров напрямую влияют на точность выполнения системного агента. Наконец, Android MCP обеспечивает локальное выполнение, позволяя приложениям безопасно взаимодействовать с агентами ИИ.
Добавление новых функций в приложение через AppFunctions подготовит ваше приложение к работе с интеллектуальной системой. Расскажите нам, как вы адаптируете свои приложения к эпохе агентных технологий!
Узнать больше
Ознакомьтесь с другими частями этой серии статей в блоге:
Часть 1: Введение в приложение и общий обзор.
Часть 2: Встроенный интеллект. Подробное изучение API GenAI от ML Kit и Gemini Nano для создания функций, ориентированных на конфиденциальность, таких как составление кратких описаний маршрутов, анализ квитанций и локальная обработка звука.
Часть 3: Гибридные и облачные методы рассуждений. Изучите, как использовать Firebase AI Logic для обоснования ответов LLM реальными данными, такими как Google Maps и веб-контекст.
Часть 4 (эта статья!): Системная интеграция. Интеграция с интеллектуальной системой Android с помощью AppFunctions.
Часть 5 (скоро): Внутриприложениевые агентские рабочие процессы. Расширьте возможности приложения с помощью комплексного помощника по бронированию на базе A2UI и ADK.
Хотите узнать больше о разработке под Android? Подписывайтесь на Android Developers на YouTube или LinkedIn !
Все фрагменты кода в этой статье блога защищены следующим уведомлением об авторских правах:
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 в этом году (с использованием технологии Antigravity). По своей сути, Jetpacker помогает пользователям планировать, исследовать и наслаждаться своим следующим большим приключением.
Jolanda Verhoef • Чтение, 4 минуты
Получайте еженедельно самые свежие новости о разработке Android прямо на свою электронную почту.



