AppFunctions — это API платформы Android с сопутствующей библиотекой Jetpack , упрощающей интеграцию Android MCP. Он позволяет вашим приложениям работать как серверы MCP на устройстве, предоставляя функции, которые служат инструментами для использования проактивными функциями, а также агентами и помощниками, такими как Google Gemini. По состоянию на май 2026 года интеграция AppFunctions с Gemini находится в закрытом предварительном тестировании с участием доверенных тестировщиков. Вы можете начать подготовку своих приложений к использованию AppFunctions и инструментов разработки уже сейчас.
Определив эти AppFunctions, вы позволяете своему приложению предоставлять услуги, данные и действия реестру, встроенному в ОС Android, что дает пользователям возможность выполнять задачи через агентов и взаимодействие на системном уровне.
AppFunctions служат мобильным аналогом инструментов в рамках протокола Model Context Protocol (MCP) . В то время как MCP традиционно стандартизирует способы подключения агентов к серверным инструментам, AppFunctions предоставляют тот же механизм для приложений Android. Это позволяет вам предоставлять доступ к возможностям вашего приложения в виде оркестрируемых «инструментов», которые авторизованные приложения (вызывающие стороны) могут обнаруживать и выполнять для удовлетворения намерений пользователя. Вызывающие стороны должны иметь разрешение EXECUTE_APP_FUNCTIONS для обнаружения и выполнения AppFunctions и могут включать агентов, приложения и ИИ-помощников, таких как 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()
Как работают функции приложения
Следующая диаграмма иллюстрирует типичный процесс обмена функциями приложений (AppFunctions) между приложениями и агентом, а затем их выполнения. Агенты, как правило, рассматривают как удаленные инструменты MCP на стороне сервера, так и локальные функции приложений при обработке запросов пользователей. Подробный процесс использования локальных функций приложений выглядит следующим образом:
- Объявление AppFunction : Приложение для Android создано с использованием AppFunctions для предоставления доступа к своим функциям, таким как «Создать заметку» или «Отправить сообщение».
- Генерация схемы : Библиотека AppFunctions Jetpack генерирует XML-файл схемы, в котором перечислены все объявленные функции AppFunctions в приложении. Операционная система Android использует этот файл для индексации доступных функций AppFunctions.
- Получение метаданных : Агент может получать метаданные AppFunction, выполняя запрос к ним. В дополнение к KDocs, специфичным для каждой функции, разработчики могут определять операционные шаблоны и ограничения на уровне приложения в метаданных приложения, чтобы управлять оркестрацией агента в различных инструментах.
- Выбор и выполнение функции приложения : На основе подсказок пользователя агент выбирает и выполняет соответствующую функцию приложения с соответствующими параметрами.
Библиотека AppFunctions Jetpack упрощает предоставление доступа к функциональности вашего приложения. С помощью обработчика аннотаций вы можете аннотировать функции, которые хотите сделать доступными для агентов. Затем абоненты могут находить и вызывать эти индексированные функции, используя AppFunctionManager .
Перед вызовом функции необходимо убедиться, что устройство поддерживает функцию AppFunctions, попытавшись получить экземпляр AppFunctionManager . После подтверждения поддержки можно проверить, включена ли конкретная функция в целевом приложении, используя isAppFunctionEnabled(packageName,functionId) . Для запроса статуса функций в других пакетах требуется разрешение android.permission.EXECUTE_APP_FUNCTIONSpermission .
Вашему приложению не требуется проверять, поддерживается ли функция 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 Refinement : Оптимизация документации по функциям и свойствам для агентов ИИ и Android MCP.
- Тестирование и отладка : Предоставьте команды ADB для локальной оценки и отладки на устройстве.
- Для тестирования и проверки из командной строки используйте команды ADB, такие как
adb shell cmd app_function ..., как прямой и простой способ проверить регистрацию функций, изучить описания метаданных и выполнить функции на устройстве. - Чтобы оценить возможности Android MCP и протестировать сквозные рабочие процессы без каких-либо запросов, установите и используйте приложение AppFunctions testing agent для Android на своем устройстве.
Часто задаваемые вопросы (FAQ)
В следующем разделе рассматриваются часто задаваемые вопросы об AppFunctions.
Я разработчик приложений. Могу ли я сегодня внедрить AppFunctions?
Да, можно реализовать и протестировать AppFunctions в вашем приложении, следуя инструкциям, изложенным в предыдущих разделах.
В чём разница между AppFunctions и MCP?
Оба подхода позволяют агентам ИИ управлять инструментами, но имеют существенные различия в архитектуре, задержке и требуемых усилиях разработчиков. AppFunctions — это встроенные в ОС механизмы, эксклюзивные для Android, которые выполняются локально. В отличие от них, стандартный MCP-сервер — это платформенно-независимое решение, которое полагается на облачное выполнение и сетевые обмены данными.
Вкратце, разработка с использованием AppFunctions позволяет использовать существующее состояние приложения непосредственно на устройстве и не требует поддержки сервисов вне вашего Android-приложения.
Я реализовал AppFunctions в своем приложении. Почему мой системный агент не может получить к ним доступ?
Функции приложений (AppFunctions) — это экспериментальная функция. Для тщательной оценки качества работы в целом на этом экспериментальном этапе доступ ко всему конвейеру обработки данных имеет лишь ограниченное количество приложений и системных агентов.
Как подготовить мое приложение к общедоступной версии AppFunctions?
Определите, какие функции вашего приложения вы хотите предоставить для автоматизации с помощью агентов. Вы можете реализовать AppFunctions в своем приложении. Для этого выполните действия, описанные в предыдущих разделах этой страницы, и убедитесь, что они зарегистрированы на устройстве, вызвав команду adb shell cmd app_function list-app-functions .
Могу ли я получить ранний доступ к полному циклу разработки агентских приложений?
Мы проводим программу раннего доступа (EAP), чтобы подключить избранные приложения для тестирования полного цикла разработки, необходимого для запуска AppFunctions в продакшене на Android. Вы можете зарегистрировать свою заинтересованность в интеграции вашего приложения AppFunctions, заполнив эту форму регистрации EAP . Регистрация вашей заинтересованности НЕ гарантирует автоматическое получение доступа к полной интеграции. Мы отправим вам электронное письмо, если ваше приложение будет выбрано для участия в программе EAP, или сообщим, когда AppFunctions станет общедоступным.
Как я могу оставить отзыв о AppFunctions?
Вы можете оставить отзыв об API, создав заявку и зарегистрировав свой интерес в форме программы раннего доступа.