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 context The execution context provided by the system. * @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( context: AppFunctionContext, title: String, dueDateTime: LocalDateTime? = null, location: String? = null ) : TaskСМИ и развлечения
- Запрос пользователя : " Создать новый плейлист с лучшими джазовыми альбомами этого года ".
- Действие AppFunction : Вызывающая сторона выполняет функцию создания плейлиста в музыкальном приложении, передавая контекст, например, "лучшие джазовые альбомы 2026 года", в качестве запроса для немедленного создания плейлиста.
/** * Create a new music playlist based on a natural language query. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, query: String ): PlaylistМежприкладные рабочие процессы
- Запрос пользователя : " Найти рецепт лапши в электронном письме Лизы и добавить ингредиенты в свой список покупок ".
- Действие AppFunction : Этот запрос использует функции из нескольких приложений. Сначала вызывающая сторона использует функцию поиска в почтовом приложении для получения содержимого. Затем она извлекает соответствующие ингредиенты и вызывает функцию приложения для составления списка покупок, чтобы заполнить список пользователя.
/** * Search for emails matching a query or sender name to retrieve content like recipes. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, query: String ): List<EmailSummary> /** * Add a list of items or ingredients to the user's active shopping list. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, items: List<String> ): ShoppingListКалендарь и расписание
- Запрос пользователя : " Добавить вечеринку по случаю дня рождения мамы в мой календарь на следующий понедельник в 18:00 ".
- Действие AppFunction : Утвержденное агентское приложение вызывает функцию «создать событие» приложения календаря, анализируя соответствующий контекст, например, «следующий понедельник» и «18:00», чтобы создать запись без необходимости вручную открывать календарь пользователем.
/** * Schedule a new event on the user's primary calendar. * * @param context The execution context provided by the system. * @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( context: AppFunctionContext, title: String, startDateTime: LocalDateTime ): Event
Как работают функции приложения
Следующая диаграмма иллюстрирует типичный процесс обмена функциями приложений (AppFunctions) между приложениями и агентом, а затем их выполнения. Агенты, как правило, рассматривают как удаленные инструменты MCP на стороне сервера, так и локальные функции приложений при обработке запросов пользователей. Подробный процесс использования локальных функций приложений выглядит следующим образом:
- Объявление AppFunction : Приложение для Android создано с использованием AppFunctions для предоставления доступа к своим функциям, таким как «Создать заметку» или «Отправить сообщение».
- Генерация схемы : Библиотека AppFunctions Jetpack генерирует XML-файл схемы, в котором перечислены все объявленные функции AppFunctions в приложении. Операционная система Android использует этот файл для индексации доступных функций AppFunctions.
- Получение метаданных : Агент может получить метаданные AppFunction, отправив запрос.
- Выбор и выполнение функции приложения : На основе подсказок пользователя агент выбирает и выполняет соответствующую функцию приложения с соответствующими параметрами.
Библиотека AppFunctions Jetpack упрощает предоставление доступа к функциональности вашего приложения. С помощью обработчика аннотаций вы можете аннотировать функции, которые хотите сделать доступными для агентов. Затем абоненты могут находить и вызывать эти индексированные функции, используя AppFunctionManager .
Перед вызовом функции необходимо убедиться, что устройство поддерживает функцию AppFunctions, попытавшись получить экземпляр AppFunctionManager . После подтверждения поддержки можно проверить, включена ли конкретная функция в целевом приложении, используя isAppFunctionEnabled(packageName,functionId) . Для запроса статуса функций в других пакетах требуется разрешение android.permission.EXECUTE_APP_FUNCTIONSpermission .
Вашему приложению не требуется проверять, поддерживается ли функция AppFunction; это автоматически обрабатывается библиотекой Jetpack. Например, AppFunctionManager может проверить, поддерживается ли эта функция.
Вот пример AppFunctions для приложения для создания заметок с возможностями создания, редактирования и отображения списков заметок:
/**
* A note app's [AppFunction]s.
*/
class NoteFunctions(
private val noteRepository: NoteRepository
) {
/**
* Lists all available notes.
*
* @param appFunctionContext The context in which the AppFunction is executed.
*/
@AppFunction(isDescribedByKDoc = true)
suspend fun listNotes(appFunctionContext: AppFunctionContext): List<Note>? {
return noteRepository.appNotes.ifEmpty { null }?.toList()
}
/**
* Adds a new note to the app.
*
* @param appFunctionContext The context in which the AppFunction is executed.
* @param title The title of the note.
* @param content The note's content.
*/
@AppFunction(isDescribedByKDoc = true)
suspend fun createNote(
appFunctionContext: AppFunctionContext,
title: String,
content: String
): Note {
return noteRepository.createNote(title, content)
}
/**
* Edits a single note.
*
* @param appFunctionContext The context in which the AppFunction is executed.
* @param noteId The target note's ID.
* @param title The note's title if it should be updated.
* @param content The new content if it should be updated.
*/
@AppFunction(isDescribedByKDoc = true)
suspend fun editNote(
appFunctionContext: AppFunctionContext,
noteId: Int,
title: String?,
content: String?,
): Note? {
return noteRepository.updateNote(noteId, title, content)
}
}
/**
* A note.
*/
@AppFunctionSerializable(isDescribedByKDoc = true)
data class Note(
/** The note's identifier */
val id: Int,
/** The note's title */
val title: String,
/** The note's content */
val content: String
)
Часто задаваемые вопросы (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, создав заявку и зарегистрировав свой интерес в форме программы раннего доступа.