之前写了一篇 《Compose 与 AGP、KGP 的关系》的文章,其中我说了这么一段话:
其实,AGP 对 Compose 的影响仅仅只作用于 TaskManager 中是否有无添加 compose-compiler 依赖,如果 AGP 有,则 Compose 与 AGP 版本无关。所以,大家如果想了解自己老项目是否能直接接入 Compose ,可以看下自己项目的 AGP 版本,然后看下这个版本的 TaskManager 源码,目前我查看的 AGP 4.1.0 版本是有的。笔者的项目是 4.2.2 的 AGP ,已成功接入 Compose 1.1.0 版本并跑起来
这段话中描述 AGP 4.1.0 支持 Compose 有点用词不准确,我先说下结论 : AGP 4.1.0 是支持 Compose 的,但 Compose 的正式版本是从 AGP 4.2.0 开始支持的
在我发掘 AGP 4.1.0 版本的 TaskManager 类时发现:
如果不仔细看的话真的发现不了问题,你看 compose-compier 这个依赖的 group 是 androidx.compose
,然后去官方文档看下 compose-compiler 依赖的 group :
怎么变成了 androidx.compose.compiler
了,然后我去 mvnrepository 上看了下 androidx.compose:compose-compiler
发布的有哪些版本:
最高的版本止步于 1.0.0-alpha03 版本,这也太坑了,这也就说明,我在上篇文章中说的通过 composeOptions 来配置 Compose 不同的正式版本在 AGP 4.1.0 及其以下是没有作用的。
然后说下我是怎么发现这个问题的,我在依赖 AGP 4.1.0 版本看源码时,突然想看下 Compose-Compiler 的源码,然后为了好复制,我就直接把 TaskManager 类中配置 Compose-Compiler 的依赖给复制了过来,在 build.gradle 中我给配置了个 1.2.0 版本,然后怎么配置版本都无法把依赖下载下来,我就去官方文档复制了个 Compose-Compiler 版本,然后对比一看,居然依赖的 Group 不一样,然后我就赶紧对比了下 AGP 4.2.0 版本是没问题的,这时确定,AGP 4.1.0 配置的 Compose-Compiler 不是正式版的依赖。