AppFunctions – это API платформы Android с сопутствующей библиотекой Jetpack, которая упрощает интеграцию с MCP Android. Он позволяет приложениям вести себя как серверы MCP на устройстве, предоставляя функции, которые действуют как инструменты для использования проактивными функциями, а также агентами и помощниками, такими как Google Gemini. В мае 2026 года интеграция AppFunctions с Gemini находится на стадии закрытого тестирования с доверенными тестировщиками. Вы можете начать готовить свои приложения к использованию AppFunctions и инструментов разработки.
Определив AppFunctions, вы сможете предоставлять сервисы, данные и действия в реестр, встроенный в ОС Android. Это позволит пользователям выполнять задачи с помощью агентов и взаимодействий на уровне системы.
Функции приложений – это мобильный аналог инструментов в протоколе контекста модели (MCP). Если MCP стандартизирует подключение агентов к серверным инструментам, то AppFunctions делает то же самое для приложений Android. Это позволяет вам предоставлять возможности вашего приложения в виде инструментов, которые авторизованные приложения (вызывающие) могут обнаруживать и выполнять для реализации намерений пользователей. У вызывающих абонентов должно быть разрешение EXECUTE_APP_FUNCTIONS на обнаружение и выполнение функций приложений. К ним относятся агенты, приложения и ИИ-помощники, такие как Gemini.
Функция AppFunctions доступна на устройствах с Android 16 и более поздних версий.
Примеры использования
AppFunctions – это мощный механизм для автоматизации задач и оптимизации взаимодействия с пользователем. Открывая возможности приложения, вы позволяете пользователям достигать сложных целей с помощью естественного языка, часто заменяя пошаговую навигацию по интерфейсу.
Ниже приведены примеры того, как AppFunctions можно использовать в приложениях разных категорий.
Управление задачами и повышение продуктивности
- Запрос пользователя: "Напомни мне забрать посылку на работе сегодня в 17:00".
- Действие AppFunction: вызывающий объект определяет нужное приложение для управления задачами и вызывает функцию для создания задачи, автоматически заполняя поля заголовка, времени и местоположения на основе запроса пользователя.
/** * Create a new task or reminder with a title, due time, and location. * * @param title The descriptive title of the task (e.g., "Pick up my package"). * @param dueDateTime The specific date and time when the task should be completed. * @param location The physical location associated with the task (e.g., "Work"). * @return The created Task */ @AppFunction(isDescribedByKDoc = true) suspend fun createTask( title: String, dueDateTime: LocalDateTime? = null, location: String? = null, ): Task = TODO()
СМИ и развлечения
- Запрос пользователя: Создай новый плейлист с лучшими джазовыми альбомами этого года.
- Действие AppFunction. Вызывающий объект выполняет функцию создания плейлиста в музыкальном приложении, передавая контекст, например "лучшие джазовые альбомы 2026 года", в качестве запроса для немедленного создания плейлиста.
/** * Create a new music playlist based on a natural language query. * * @param query The description used to generate the playlist (e.g., "top jazz albums from 2026"). * @return The final created playlist based on songs. */ @AppFunction(isDescribedByKDoc = true) suspend fun createPlaylistFromQuery( query: String, ): Playlist = TODO()
Рабочие процессы между приложениями
- Запрос пользователя: "Найди рецепт лапши из письма Лизы и добавь ингредиенты в мой список покупок".
- Действие AppFunction. В этом запросе используются функции из нескольких приложений. Сначала вызывающий абонент использует функцию поиска в приложении электронной почты, чтобы найти контент. Затем он извлекает нужные ингредиенты и вызывает функцию приложения для списка покупок, чтобы добавить их в список пользователя.
/** * Search for emails matching a query or sender name to retrieve content like recipes. * * @param query The search term or contact name (e.g., "Lisa noodle recipe"). * @return A list of matching email summaries containing the requested information. */ @AppFunction(isDescribedByKDoc = true) suspend fun searchEmails( query: String, ): List<EmailSummary> = TODO() /** * Add a list of items or ingredients to the user's active shopping list. * * @param items The names of the ingredients or products to add to the list. * @return The final shopping list with new items added */ @AppFunction(isDescribedByKDoc = true) suspend fun addItemsToShoppingList( items: List<String>, ): ShoppingList = TODO()
Календарь и планирование
- Запрос пользователя: "Добавь в мой календарь на следующий понедельник в 18:00 день рождения мамы".
- Действие AppFunction. Одобренное приложение-агент вызывает функцию "создать мероприятие" в приложении "Календарь", анализируя контекст, например "в следующий понедельник" и "в 18: 00", чтобы создать запись без необходимости вручную открывать календарь.
/** * Schedule a new event on the user's primary calendar. * * @param title The name of the calendar event (e.g., "Mom's birthday party"). * @param startDateTime The specific date and time the event is scheduled to begin. * @return The created Event object. */ @AppFunction(isDescribedByKDoc = true) suspend fun createCalendarEvent( title: String, startDateTime: LocalDateTime, ): Event = TODO()
Как работают функции приложений
На диаграмме ниже показано, как приложения передают функции агенту и как они выполняются. При обработке запросов пользователей агенты, скорее всего, будут использовать как удаленные инструменты MCP на стороне сервера, так и локальные функции приложений. Подробная схема использования локальных функций приложения приведена ниже.
- Декларация AppFunction. Приложение Android создано с использованием AppFunction, чтобы сделать доступными такие функции, как "Создать заметку" или "Отправить сообщение".
- Создание схемы. Библиотека AppFunctions Jetpack создает XML-файл схемы, в котором перечислены все объявленные функции приложения. ОС Android использует этот файл для индексации доступных функций приложения.
- Получение метаданных. Агент может получать метаданные AppFunction, отправляя запросы. Помимо KDocs для отдельных функций, разработчики могут определять операционные шаблоны и ограничения на уровне приложения в метаданных приложения, чтобы направлять оркестрацию агента в нескольких инструментах.
- Выбор и выполнение AppFunction. На основе запросов пользователя агент выбирает и выполняет подходящую функцию приложения с нужными параметрами.
Библиотека AppFunctions Jetpack упрощает предоставление доступа к функциям приложения.
С помощью процессора аннотаций вы можете аннотировать функции, которые хотите сделать доступными для агентов. После этого вызывающие абоненты смогут находить и вызывать эти проиндексированные функции с помощью AppFunctionManager.
Перед вызовом функции вызывающие стороны должны убедиться, что устройство поддерживает функцию AppFunctions, попытавшись получить экземпляр AppFunctionManager. После того как функция будет поддерживаться, звонящие смогут проверять, включена ли определенная функция в целевом приложении, с помощью isAppFunctionEnabled(packageName,functionId). Чтобы запрашивать статус функций в других пакетах, требуется разрешение android.permission.EXECUTE_APP_FUNCTIONS.
Приложению не нужно проверять, поддерживается ли функция AppFunction. Это автоматически обрабатывается в библиотеке Jetpack. Например, AppFunctionManager может проверить, поддерживается ли функция.
Вот пример AppFunctions для приложения для создания заметок с возможностью создавать, редактировать и просматривать заметки:
@RequiresApi(36) @AndroidEntryPoint @AppFunctionServiceEntryPoint( serviceName = "TaskAppFunctionService", appFunctionXmlFileName = "task_app_function_service", ) abstract class BaseTaskAppFunctionService : AppFunctionService() { @Inject internal lateinit var taskRepository: TaskRepository /** * Creates a task based on [createTaskParams]. * * @param createTaskParams The parameter to describe how to create the task. */ @AppFunction(isDescribedByKDoc = true) suspend fun createTask( createTaskParams: CreateTaskParams, ): Task = withContext(Dispatchers.IO) { // Developers can use predefined exceptions to let the agent know // why it failed. if (createTaskParams.title == null && createTaskParams.content == null) { throw AppFunctionInvalidArgumentException("Title or content should be non-null") } val id = taskRepository.createTask( createTaskParams.title, createTaskParams.content ) return@withContext taskRepository .getTask(id) ?.toTask() ?: throw AppFunctionElementNotFoundException("Task not found for ID = $id") } // Maps internal TaskEntity private fun TaskEntity.toTask() = Task(id = id, title = title, content = description) }
/** The parameter to create the task. */ @AppFunctionSerializable(isDescribedByKDoc = true) data class CreateTaskParams( /** The title of the task. */ val title: String?, /** The content of the task. */ val content: String?, ) /** The user-created task. */ @AppFunctionSerializable(isDescribedByKDoc = true) data class Task( /** The ID of the task. */ val id: String, /** The title of the task. */ val title: String, /** The content of the task. */ val content: String, )
Примеры, навыки и инструменты тестирования
Чтобы вам было проще освоить AppFunctions, мы подготовили следующие материалы:
- Изучите пример AppFunctions, чтобы проверить, как все работает на ваших устройствах.
- Используйте навык агента AppFunctions, чтобы ускорить разработку на всех четырех этапах жизненного цикла:
- Обнаружение. Анализ базы кода для выявления и рекомендации ценных функций для оркестрации ИИ.
- Реализация и конфигурация. Создавайте реализации на Kotlin, настраивайте метаданные системы и зависимости сборки.
- Улучшение KDoc. Оптимизация документации по функциям и свойствам для ИИ-агентов и Android MCP.
- Тестирование и отладка. Предоставьте команды ADB для локальной оценки и отладки на устройстве.
- Для тестирования и проверки с помощью командной строки используйте команды ADB, например
adb shell cmd app_function .... Это простой и быстрый способ проверить регистрацию функций, изучить описания метаданных и выполнить функции на устройстве.
Часто задаваемые вопросы
В этом разделе приведены ответы на часто задаваемые вопросы о функциях приложений.
Я разработчик приложений. Можно ли реализовать AppFunctions уже сегодня?
Да, вы можете реализовать и протестировать AppFunctions в своем приложении, следуя инструкциям в предыдущих разделах.
В чем разница между AppFunctions и MCP?
Оба позволяют ИИ-агентам управлять инструментами, но значительно различаются по архитектуре, задержке и усилиям, которые необходимо приложить разработчику. AppFunctions – это встроенные хуки на уровне ОС, которые доступны только в Android и выполняются локально. Стандартный MCP-сервер – это кроссплатформенное решение, которое работает в облаке и использует сетевые запросы.
Таким образом, при разработке с помощью AppFunctions вы можете использовать существующее состояние приложения непосредственно на устройстве и вам не нужно поддерживать сервисы за пределами приложения Android.
Я реализовал в своем приложении функции AppFunctions. Почему системный агент не может получить к ним доступ?
AppFunctions – это экспериментальная функция. Чтобы тщательно оценить качество работы функции на этапе тестирования, доступ к полному конвейеру данных предоставляется только ограниченному числу приложений и системных агентов.
Как подготовить приложение к общей доступности AppFunctions?
Решите, какие функции приложения вы хотите сделать доступными для автоматизации.
Вы можете реализовать AppFunctions в своем приложении. Для этого выполните инструкции из предыдущих разделов этой страницы и убедитесь, что функции зарегистрированы на устройстве, вызвав adb shell cmd app_function list-app-functions.
Можно ли получить ранний доступ к агентному интерфейсу для разработчиков?
Мы проводим программу раннего доступа, чтобы протестировать все этапы разработки, необходимые для запуска функций приложений в Android. Чтобы зарегистрироваться в программе раннего доступа, заполните эту форму. Заполнив форму, вы не получите автоматический доступ к полной интеграции. Если ваше приложение будет выбрано для участия в программе раннего доступа, мы сообщим вам об этом по электронной почте. Мы также отправим вам письмо, когда AppFunctions станут доступны всем.
Как отправить отзыв о функциях приложений?
Вы можете оставить отзыв об API, сообщив о проблеме и подав заявку на участие в программе раннего доступа.