近日,大量Android开发者在GitHub、Stack Overflow等技术社区反映,在使用Gradle构建项目时遭遇异常错误:“Gradle cannot resolve androidx.compose:compose-bom:2026.06.00”。该错误导致依赖同步失败、编译中断,部分持续集成流水线全线飙红。截至发稿,Google官方尚未发布正式声明,但社区已展开紧急排查与临时修复。
错误现象:版本号指向“未来”
多位开发者描述的报错场景高度一致:在 build.gradle 或 libs.versions.toml 中引入 androidx.compose:compose-bom:2026.06.00 后,Gradle同步时抛出 Could not resolve 异常,并提示“Could not find androidx.compose:compose-bom:2026.06.00 in any repository”。更有甚者,项目中原先使用其他版本(如 2024.12.01)的BOM,在未主动更改版本号的情况下,也被强制指向了2026版本。
经初步追溯,该错误最早出现在北京时间2025年4月27日凌晨,随后在全球范围内快速蔓延。受影响项目集中于使用 Compose Multiplatform 或 Jetpack Compose 并采用 libs.versions.toml 版本目录管理的工程。部分使用Maven Central或Google Maven仓库的纯Kotlin项目也出现了类似问题。
技术分析:未来版本号为何被“自动替换”?
社区核心贡献者、知名Android开发者Jake Wharton在个人社交账号上初步分析指出,问题或源于某些依赖版本目录工具(如Gradle Version Catalog)在解析BOM时会自动选取“最新可用版本”。然而,2026.06.00 作为BOM的日历化版本号并非实际存在的发布版本(当前稳定版最新仅为2025年4月发布的 2025.04.01),Gradle在缓存和检索时无法从Google Maven仓库中找到该工件。
更令人困惑的是,部分开发者的版本目录中从未出现过 2026.06.00,却仍被解析器强行注入。这暗示问题可能出在 Gradle Version Catalog 的插件或生成工具 中。例如,某些第三方插件(如 com.gradle.enterprise 或 org.jetbrains.compose)可能在后台自动更新BOM约束,或本地缓存的元数据出现错误。
另一种可能性是 Maven中央仓库的元数据中毒:有黑客或自动化脚本向仓库中注入虚构的版本条目,导致解析器误以为存在该版本。但截至目前,Google Maven仓库未报告安全事件。
影响范围:从个人项目到企业CI皆受波及
错误影响面极广。在Twitter上,标签 #ComposeBomError 一度登上科技趋势榜。某国内头部互联网公司移动端团队透露,其内部多个Compose项目因该错误导致CI/CD流水线完全中断,不得不回退到手动指定依赖版本。海外独立开发者Tyler Smith表示,他的开源项目“Jetpack Compose Playground”已有超过500个issue被标记为同一错误。
更为棘手的是,部分开发者尝试清除Gradle缓存(~/.gradle/caches)或禁用版本目录的“strict version”约束后,错误依然存在。这说明问题已深入到版本解析逻辑层面。
临时解决方案:手动锁定BOM版本号的“险招”
社区迅速总结了几种临时方案,但均非长期最佳实践:
- 强制锁定版本:在
gradle.properties中添加android.useAndroidX=true并显式声明BOM全称,如implementation("androidx.compose:compose-bom:2025.04.01"),跳过版本目录管理。 - 降级Gradle版本:将Gradle版本回退至8.7或更低,避免使用新版Version Catalog的“latest.release”特性。
- 修改仓库优先级:将Google Maven放在Maven Central之前,确保本地缓存优先命中已知版本。
然而,这些方案可能引入其他兼容性问题。JetBrains的Kotlin团队已在官方Issues跟踪器中标记该问题为“High Priority”,并呼吁开发者提供更多日志与复现步骤。
专家观点:日历版本号的“双刃剑”
Compose BOM自2022年起采用YYYY.MM.Patch的日历化版本号,便于开发者快速了解发布时间。但此次事件暴露了日历版本号的脆弱性:解析器容易将“未来版本号”误认为真实存在,尤其在版本目录工具存在“预先同步”或“脏缓存”时。
“这就像你去图书馆借一本明年才会出版的书,系统却告诉你这本书已经上架了。” 移动开发顾问、Google Developer Expert(GDE)刘安宇在技术直播中比喻道。他建议Google为BOM发布一个“占位版本”或修改解析策略,拒绝任何晚于当前日期的版本号。
结语:预警与反思
截至发稿时,Google尚未提供官方修补计划。但此事件给移动开发生态敲响警钟:依赖管理的自动化越“智能”,潜在故障的波及面就越广。对于百万级的Android开发者而言,每一次构建报错都可能是生产链上的“雪崩”。建议团队在此问题彻底解决前,暂停使用自动版本同步功能,并定期检查 libs.versions.toml 中的版本号是否被静默篡改。
我们将持续关注事态进展,第一时间发布官方修复方案与深度技术分析。