AppFunctions 概览

借助 AppFunctions,您的 Android 应用可以共享特定功能,供系统和各种 AI 智能体及助理发现和调用。通过定义这些函数,您可以让应用向 Android 操作系统提供服务、数据和操作,从而让用户能够通过 AI 智能体和系统级互动完成任务。

AppFunctions 相当于 Model Context Protocol (MCP) 中的移动端工具。MCP 传统上用于标准化智能体连接到服务器端工具的方式,而 AppFunctions 为 Android 应用提供了相同的机制。这样,您就可以将应用的功能公开为可编排的“工具”,供获授权的应用(调用方)发现和执行,以满足用户意图。调用方必须具有 EXECUTE_APP_FUNCTIONS 权限才能发现和执行 AppFunctions,并且可以包括智能体、应用、 和 AI 助理(例如 Gemini)。

AppFunctions 适用于搭载 Android 16 或更高版本的设备。

用例示例

AppFunctions 提供了一种强大的机制来自动执行任务并简化用户互动。通过公开应用的功能,您可以让用户使用自然语言完成复杂的目标,通常无需使用界面进行逐步手动导航。

以下场景说明了如何使用 AppFunctions 来提升各种应用类别中的体验:

  • 任务管理和效率
    • 用户请求:“提醒我今天下午 5 点在工作地点领取包裹”。
    • AppFunction 操作:调用方会识别相关的任务 管理应用,并调用一个函数来创建任务,自动 填充标题、时间和地点字段,具体取决于用户 提示。
  • 媒体和娱乐
    • 用户请求:“使用 今年的热门爵士专辑创建一个新播放列表”。
    • AppFunction 操作:调用方会在音乐应用中执行播放列表创建函数 ,传递“2026 年热门爵士专辑”等上下文作为 查询,以立即生成和启动内容。
  • 跨应用工作流
    • 用户请求:“从 Lisa 的电子邮件中找到面条食谱,并将 配料添加到我的购物清单中”。
    • AppFunction 操作: 此请求使用来自多个应用的函数。 首先,调用方使用电子邮件应用的搜索功能来检索内容。然后,它会提取相关配料,并调用购物清单应用的函数来填充用户的清单。
  • 日历和日程安排
    • 用户请求:“将妈妈的生日派对添加到我的日历中,时间为下周 一下午 6 点”。
    • AppFunction 操作:获批准的智能体应用会调用日历 应用的“创建活动”函数,解析“下周一”和“下午 6 点”等相关上下文,以创建条目,而无需用户 手动打开日历。

AppFunctions 的运作方式

AppFunctions 是一项 Android 16 平台功能,也是一个配套的 Jetpack 库,可让应用公开特定函数,供智能体应用等调用方 在设备上访问和执行。

下图说明了应用如何将 AppFunctions 共享给智能体,以及随后如何执行这些函数。在处理用户请求时,智能体可能会同时考虑服务器端远程 MCP 工具和本地 AppFunctions。使用本地 AppFunctions 的详细流程如下:

  • AppFunction 声明:Android 应用构建为公开其 AppFunctions,例如“创建笔记”或“发送消息”。
  • 架构生成:AppFunctions Jetpack 库会生成一个 XML 架构文件,其中列出了应用中的所有已声明 AppFunctions。Android OS 使用此文件为可用的 AppFunctions 编制索引。
  • 元数据检索:智能体可以通过 查询来检索 AppFunction 元数据。
  • AppFunction 选择和执行:根据用户提示,智能体 会选择并执行具有相应 形参的相应 AppFunction。
一张图表,显示了 AppFunctions 从应用曝光到代理执行的典型流程。
图 1:智能体公开和 随后执行 AppFunctions 的典型流程。

AppFunctions Jetpack 库简化了应用功能的公开。 借助注解处理器,开发者可以为要公开的函数添加注解。然后,调用方可以使用 AppFunctionManager发现和调用这些已编制索引的函数。

在调用函数之前,调用方应尝试检索 AppFunctionManager 的实例,以验证设备是否支持 AppFunctions 功能。如果支持,调用方可以使用 isAppFunctionEnabled(packageName, functionId)验证目标应用中是否启用了特定 函数。查询其他软件包中 函数的状态需要 android.permission.EXECUTE_APP_FUNCTIONS permission

您的应用无需验证是否支持 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
)

常见问题解答

以下部分解答了有关 AppFunctions 的常见问题。

问:我是应用开发者。我今天可以实现 AppFunctions 吗?

:可以。您可以按照前面部分中详述的指南在应用中实现和测试 AppFunctions。

问:我已在应用中实现了 AppFunctions。为什么我的系统智能体无法访问它们?

:AppFunctions 是一项实验性功能。为了在此实验阶段仔细评估整体体验的质量,只有有限数量的应用和系统智能体可以访问整个流水线。

问:我正在开发智能体。我可以访问应用提供的 AppFunctions 吗?

:您的测试智能体可以在开发环境中访问 AppFunctions。 在此实验阶段,只有有限数量的系统智能体可以在生产环境中访问和执行 AppFunctions。

问:哪些系统智能体可以访问 AppFunctions?

:在 AppFunctions 处于实验阶段时,只有有限数量的系统智能体可以访问整个流水线 。

问:如何为 AppFunctions 正式版做好应用准备?

:考虑一下您希望向智能体自动化公开哪些应用功能。您可以在应用中实现 AppFunctions。为此,请按照此页面前面部分中的 步骤操作,并验证它们是否已在设备上 注册到设备上,方法是调用 adb shell cmd app_function list-app-functions

问:我可以抢先体验端到端智能体开发者体验吗?

:我们正在开展抢先体验计划 (EAP),以便让部分应用参与测试在 Android 上将 AppFunctions 发布到生产环境所需的端到端开发者体验。您可以通过此 EAP 注册表单登记对集成您的 AppFunctions 的意向。登记意向并不意味着您会自动获得完整集成的访问权限。如果您的应用入选 EAP,或者 AppFunctions 公开发布后,我们会向您发送电子邮件。

问:如何提供有关 AppFunctions 的反馈?

:您可以提交问题 并填写抢先体验计划表单来提供有关 API 的反馈。