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

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

AppFunctions 是什么

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

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

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

bash 复制代码
suspend fun createTask
(
 context:AppFunctionContext,title:String,
 dueDateTime: LocalDateTime?,
 location: String?
): Task

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

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

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

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

当前限制

AppFunctions 现在还是 experimental preview。

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

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

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

并且 调用方必须有:

bash 复制代码
  <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 里配置:

bash 复制代码
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 才能发现这些函数。

怎么验证

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

bash 复制代码
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 天邮件"比"读取所有邮件"更容易控制数据边界。

最后

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

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

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

#Android #AppFunctions #MCP #Gemini #AI

相关推荐
BUG研究员_7 小时前
LangGraph持久化之失败后恢复运行
python·agent
2501_915918418 小时前
怎么把 Python 写的 Flet 应用打包成 iOS App 并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
邪修king10 小时前
Re:Linux系统篇(二十六):文件系统(二):Ext 文件系统底层详解:从 inode、块组到软硬链接,结合 Windows 讲透文件管理本质
android·java·linux
用户2832096793710 小时前
上下文工程:决定 Agent 跑到第 50 轮还能不能干活
agent
parksben10 小时前
OpenSider:让浏览器驱动 Agent
开源·github·agent
桃西西呀11 小时前
文件监控 Agent 为什么总在关键时刻掉链子
人工智能·llm·agent
又见情义11 小时前
RK3568 Android 13 版本号管理实战:基于 ROCKCHIP_BUILD_NUMBER 的定制化方案
android
终端安全笔记11 小时前
iOS 27 强制 TLS 1.2:租赁设备的注册链路会在哪一环断
android·网络·安全·ios·智能手机
半糖程序员11 小时前
从零构建 Agent(6):让 Agent 完成一次问答
agent
无限压榨切图仔11 小时前
向量库能搜到内容,为什么还不算学会 RAG
前端·agent