乐于分享
好东西不私藏

关于 AppFunctions

关于 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生态的标准配置。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 关于 AppFunctions

猜你喜欢

  • 暂无文章