Android官方发布 AppFunctions,让系统AI直接调用你的APP

0 阅读3分钟

本文首发于微信公众号“Android技术圈”

AppFunctions 是什么

AppFunctions 是 Android 平台 API,加上一组 Jetpack 库。

过去用户要完成一个任务,通常要打开 App,找到页面,输入内容,再点按钮。

AppFunctions 想把这件事拆成更结构化的函数。比如一个待办 App 可以暴露:

suspend fun createTask
(
 context:AppFunctionContext,title:String,
 dueDateTime: LocalDateTime?,
 location: String?
): Task

Agent 收到用户指令“今天 5 点提醒我去公司拿快递”后,不一定要把用户带进待办 App 页面。

它可以根据函数描述选择 createTask,把标题、时间、地点解析成参数,再交给 App 执行。

这和 Intent 不一样。Intent 更像页面和动作入口,参数表达能力有限,很多时候还要靠约定和兼容逻辑。

AppFunctions 更像给 Agent 看的结构化 API:函数名、参数、返回值、说明、可用状态都会被系统索引。

Image

当前限制

AppFunctions 现在还是 experimental preview。

官方文档写得很清楚:API 还可能变化,Gemini 的完整集成链路在 2026 年5 月仍然是 trusted testers 的 private preview。

设备要求也比较高:AppFunctions 需要 Android 16 或更高版本。项目侧需要 compileSdk 36 或更高。这意味着它现在更适合提前验证和改造架构,不适合把核心生产链路直接押上去。但它已经可以在 App 内实现和测试。

官方建议可以先接入 AppFunctions,再用 adb 检查系统是否已经注册到这些函数。

并且 调用方必须有:

  <uses-permission android:name="android.permission.EXECUTE_APP_FUNCTIONS" />

这个权限目前是 internal|privileged,官方写明“currently only granted to privileged system apps”。所以普通三方 App 不能在生产环境随便当caller 去调别的 AppFunction。

怎么用

AppFunctions 需要 Jetpack 库和 KSP 编译器。官方示例里当前版本是 1.0.0-alpha09。在 App module 里配置:

ksp {
 arg("appfunctions:aggregateAppFunctions", "true")
}

dependencies {
    implementation("androidx.appfunctions:appfunctions:1.0.0-alpha09")
    implementation("androidx.appfunctions:appfunctions-service:1.0.0-alpha09")
    ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha09")
}

如果项目是多模块,只需要在顶层 App module 配一次 aggregateAppFunctions。KSP 编译器会扫描注解,生成 AppFunctions 的 schema。

Android OS 再根据这个 schema 建索引,后续 Agent 才能发现这些函数。

Image

怎么验证

接入后可以用 adb 看系统是否已经识别到 AppFunctions。

adb shell cmd app_function list-app-functions | grep --after-context 10 com.example.todo

如果能看到对应 package 下的函数信息,说明 schema 生成和系统索引已经跑通。官方还建议可以让 Gemini in Android Studio 或其他 Agent 先执行:这类验证方式适合开发阶段。

真正上线前还要补权限、确认、审计和异常处理。

哪些能力适合暴露

不是所有按钮都适合变成 AppFunction。适合优先考虑的是自然语言表达更方便的任务。比如创建日程、添加待办、搜索邮件、创建播放列表、把菜谱里的食材加入购物清单。

这些任务如果靠手点 UI,步骤多、参数多、容易漏。Agent 来做解析,App 来做执行,体验会更自然。不适合一上来暴露的是高风险动作。删除数据、付款、发送敏感内容、修改账号设置,这些操作即使能被 Agent 调用,也应该由 App 自己保留明确确认流程。

AppFunctions 的函数粒度也要窄。不要给 Agent 一个“执行任意用户命令”的大口子。更好的方式是把能力拆成明确、可审计、参数有限的函数。比如“添加一个待办”比“管理待办事项”更安全。“搜索最近 30 天邮件”比“读取所有邮件”更容易控制数据边界。

Image

最后

AppFunctions 不是让 你的Android App 变成聊天机器人。它是让 App 把自己的能力变成系统 Agent 可发现、可调用、可控制的本地工具。

现在它还在预览阶段,真正的 Gemini 端到端体验还没有完全开放。

但对 Android 开发者来说,方向已经很明确:后面的 App 不只要设计页面,也要设计能被系统理解的能力接口。

#Android #AppFunctions #MCP #Gemini #AI