Обзор функций приложения

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) от момента доступа к приложению до выполнения агентом.
Рисунок 1 : Типичная схема предоставления и последующего выполнения AppFunctions агентом.

Библиотека 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, создав заявку и зарегистрировав свой интерес в форме программы раннего доступа.