你以为把appfunctions从 1.0.0-alpha08 匀到 alpha10 只是次人畜无害的依赖升级?点下 Sync,Gradle 立刻就给你颜色看:
Could not find androidx.appfunctions:appfunctions-service:1.0.0-alpha10.
![]()
直奔 Maven 仓库一看,好嘛,人家 alpha10 压根就不发布appfunctions-service了。之前那种“靠 library 自动 merge 一个服务入口,你啥都不用管”的小甜头,在这个版本彻底翻篇。
这坑的本质就一句话:从 alpha10 开始,你得亲手写一个带@AppFunctionServiceEntryPoint的AppFunctionService。再也没有现成的服务组件替你搪塞了。
下面把这次升级里最容易摔跟头的几个点掰开揉碎了说:
1. 拆掉“包名”的惯性
上篇文章我口口声声说 agent 会传 app1、app2 的 package name,放到 Be nice 里完全是句鬼话——实际上人家是按显示名称(display name)匹配已装应用,并且不区分大小写。用户嘴里说的是“时钟”和“通讯录”,agent 就该认得这两个名字。包名是我们工程师脑子里的捷径,agent 可不吃这套。KDoc 和 App 级元数据必须把“我接受什么”写明白,因为 agent 读的是文档,不是你脑子里的 APK 结构。
2. 服务入口自己写,没有再帮你兜底的了
alpha09 还稀里糊涂地带着appfunctions-service,直接跳到 alpha10 就没这个福分。新的玩法要求你这样声明:
@RequiresApi(Build.VERSION_CODES.BAKLAVA)@AppFunctionServiceEntryPoint(serviceName = "BeNiceAppFunctionService",appFunctionXmlFileName = "benice_app_functions",abstract class BeNiceFunctions : AppFunctionService() { … }compileSdk 得保持在 36 以上(Be nice 项目已切到 37)。KSP 生成的 XML 文件名也跟着变,我这边出来的是benice_app_functions.xml。
3. AGP 与 KSP 的老仇人又回来了
升完级,打包依然可能飘忽不定。我还是沿用第一篇文章里的土方子:让每个merge*Assets任务依赖对应的ksp*Kotlin任务。不这样卡一下脖子,生成的 assets 文件就有概率跑丢。文件名换了,老问题可是一点没见老。
整体看,alpha10 这波改动,就是要把那个“帮你自动注册服务”的黑盒子一脚踢开。自己攥着AppFunctionService,虽说得多写几行,但边界终于变得清清楚楚——当然,前提是你没被 Gradle 绊死在半道上。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.