Compose Multiplatform 真的能用吗?踩坑记录
「Compose Multiplatform 真的能用吗?踩坑记录」
去年十月份,我尝试把一个内部用的数据看板工具从纯 Android 迁到 Compose Multiplatform。动机听起来很合理:团队里有人用 Mac,有人用 Windows,管理层又想在 iPad 上预览。项目本身不大,就一个列表页加详情页,想着用 CMP 顺手覆盖 Android、Desktop 和 iOS 三端,总比单独写三套 UI 划算。当时选用的版本是 Kotlin 1.9.10,Compose Multiplatform 1.5.10,Android Gradle Plugin 8.1.2。结果第一次 Gradle sync 跑了四十分钟,最后报错:Could not find androidx.compose.compiler:compiler:1.5.2。我盯着这行日志看了五分钟,因为我根本没在 dependencies 里显式声明过这个 artifact。后来才反应过来,这是 JetBrains 的 Gradle 插件在解析 Compose Compiler 时,和 Android Gradle Plugin 的依赖解析规则撞车了。这个开局就给我泼了盆冷水。
Gradle 同步:版本对齐不是人干的事
Compose Multiplatform 的生态系统目前处于一个非常尴尬的耦合状态。你需要同时伺候好四个版本号:Kotlin 版本、Compose Multiplatform 插件版本、Android Gradle Plugin 版本,以及隐藏在背后的 Androidx Compose Compiler 版本。CMP 1.5.10 时代的官方文档写着支持 Kotlin 1.9.10,但当你把 AGP 升到 8.1 以上时,AGP 会默认拉取它自己认为合适的 Kotlin Gradle Plugin 版本。如果这时候你又在 gradle/libs.versions.toml 里把 Compose Multiplatform 设为 1.6.0-beta01,插件内部会尝试去解析 androidx.compose.compiler:compiler:1.5.4-dev 之类的开发版 compiler,而 Maven Central 上根本没有这个版本。
我的 build.gradle.kts 里一开始是这么写的: