关于 AppFunctions
在AI与操作系统深度融合的浪潮中,Android 16引入了一项关键能力——AppFunctions(应用函数)。这项功能允许应用向系统暴露特定的“功能接口”,供AI助手(如Gemini)或其他代理应用调用执行,实现端侧的应用间智能协作。
一、是什么:Android端的类MCP协议
AppFunctions是Android 16平台级功能,配套提供Jetpack库支持。其核心设计理念与模型上下文协议(MCP)类似——允许应用将自身能力封装为“工具”,供AI代理按需调用。但关键区别在于:所有函数调用均在设备本地完成,不上传云端。
从技术架构看,AppFunctions包含两大核心组件:
· AppFunctionService:抽象基类,应用需继承并实现具体的业务逻辑
· AppFunctionManager:系统服务,负责函数发现、调度与执行
二、核心概念与标识机制
2.1 函数标识与元数据索引
每个暴露的函数拥有唯一的functionIdentifier(如orderFood、createAlarm)。当应用安装时,系统通过App Search框架自动扫描并索引这些函数的元数据,存储为AppFunctionStaticMetadata文档,供调用方检索发现。
2.2 权限分层
Android 16定义了两级执行权限:
权限 安全级别 适用场景
EXECUTE_APP_FUNCTIONS 标准 普通代理应用调用
EXECUTE_APP_FUNCTIONS_TRUSTED 高 仅系统级助手(如Gemini)可调用,应用可选择性授权
2.3 隐私控制面板
在Android 16 QPR2中,系统设置新增了“代理对其他应用的控制”管理页面,允许用户精细控制哪些AI助手可以调用哪些应用的函数。
三、技术实现:从声明到执行
3.1 服务声明(提供方)
应用需在AndroidManifest.xml中声明AppFunctionService,并绑定特定权限:
“`xml
<service
android:name=”.YourAppFunctionService”
android:permission=”android.permission.BIND_APP_FUNCTION_SERVICE”>
<intent-filter>
<action android:name=”android.app.appfunctions.AppFunctionService” />
</intent-filter>
</service>
“`
3.2 业务逻辑实现
继承AppFunctionService并实现onExecuteFunction方法:
“`kotlin
class YourAppFunctionService : AppFunctionService() {
override fun onExecuteFunction(
request: ExecuteAppFunctionRequest,
callingPackage: String,
callingPackageSigningInfo: SigningInfo,
cancellationSignal: CancellationSignal,
callback: OutcomeReceiver<ExecuteAppFunctionResponse, AppFunctionException>
) {
when (request.functionIdentifier) {
“orderFood” -> {
// 解析参数并执行业务逻辑
val result = ExecuteAppFunctionResponse.Builder(
ExecuteAppFunctionResponse.RESULT_OK
).build()
callback.onResult(result)
}
else -> callback.onError(
AppFunctionException(AppFunctionException.ERROR_FUNCTION_NOT_FOUND)
)
}
}
}
“`
注意:onExecuteFunction运行在主线程,耗时操作需自行切换线程。
3.3 函数调用(消费方)
调用方通过AppFunctionManager执行函数:
“`kotlin
val appFunctionManager = context.getSystemService(AppFunctionManager::class.java)
val request = ExecuteAppFunctionRequest.Builder(
targetPackageName = “com.example.foodapp”,
functionIdentifier = “orderFood123”
).build()
appFunctionManager.executeAppFunction(
request,
executor,
cancellationSignal,
object : OutcomeReceiver<ExecuteAppFunctionResponse, AppFunctionException> {
override fun onResult(result: ExecuteAppFunctionResponse) {
// 处理执行结果
}
override fun onError(error: AppFunctionException) {
// 处理错误
}
}
)
“`
四、典型应用场景
根据Google公布的技术文档,AppFunctions主要服务于四类场景:
4.1 任务管理与生产力
· 用户指令:“提醒我今天下午5点在办公室取包裹”
· 执行流程:AI识别任务管理应用 → 调用“创建任务”函数 → 自动填充标题、时间、地点
4.2 媒体与娱乐
· 用户指令:“创建包含今年顶级爵士乐专辑的播放列表”
· 执行流程:AI调用音乐应用的“创建播放列表”函数 → 传入查询参数 → 立即生成内容
4.3 跨应用工作流
· 用户指令:“从Lisa的邮件中找到面条食谱,将食材加入购物清单”
· 执行流程:AI调用邮件应用的“搜索”函数 → 提取食材 → 调用购物清单应用的“添加”函数
4.4 日历与日程
· 用户指令:“把妈妈的生日聚会添加到下周一晚上6点的日历”
· 执行流程:AI调用日历应用的“创建事件”函数 → 解析时间语义 → 自动创建条目
五、与UI自动化框架的协同
AppFunctions并非Android 16在AI交互方面的唯一能力。Google同时推出了UI自动化框架,两者的定位差异如下:
特性 AppFunctions UI自动化框架
实现方式 应用主动声明函数接口 系统模拟UI操作
开发成本 需应用适配开发 开发者零代码介入
可控性 高(函数级粒度控制) 低(全界面模拟)
适用场景 核心功能精确调用 未适配应用的通用操作
推出状态 Android 16已支持 开发中,Android 17全面扩展
Google计划在2026年下半年分享更多关于两者协同使用的技术细节。
六、对开发者的意义
AppFunctions标志着Android生态向“AI原生”迈出关键一步:
1. 能力可发现:应用功能不再是“黑盒”,AI可检索并调用
2. 体验无缝化:用户无需在应用间切换,AI代为完成跨应用操作
3. 隐私可控:函数调用在端侧完成,用户可通过系统设置精细授权
当前,Google自家的日历、笔记、任务等应用已率先支持AppFunctions。随着三星(OneUI 8.5+)、vivo、OPPO等厂商跟进,这项能力将逐步成为Android生态的标准配置。
夜雨聆风