Flutter接入firebase_ml_vision 0.10.0时ML图像标签模型依赖冲突报错
问题根因
触发报错的核心是依赖硬版本冲突:手动引入的com.google.firebase:firebase-ml-vision-image-label-model:17.0.2属于旧版停更依赖,它强制要求依赖com.google.android.gms:play-services-vision-common:17.0.2,但当前项目通过直接依赖、插件传递依赖、Firebase BOM版本锁定,已经将play-services-vision-common固定在19.1.3,两者的版本约束无法匹配,最终被Google Services Gradle插件的版本校验机制拦截,导致构建失败。
分场景调整方案
方案1:常规适配(最推荐,无版本错位)
- 首先删除手动添加的硬编码离线模型依赖:
implementation 'com.google.firebase:firebase-ml-vision-image-label-model:17.0.2' - 移除冗余的手动vision系列依赖,避免和版本管理机制冲突,需要删除的依赖包括:
implementation 'com.google.firebase:firebase-ml-vision:24.0.1'implementation 'com.google.android.gms:play-services-vision:20.1.3'implementation 'com.google.android.gms:play-services-vision-common:19.1.3'implementation 'com.google.android.gms:play-services-vision-image-label:18.1.1'
- 保留Firebase BOM的统一版本管理配置:
implementation platform('com.google.firebase:firebase-bom:26.4.0'),所有Firebase、ML Vision相关的依赖不需要手动指定版本号,由BOM自动拉取完全兼容的匹配版本,从根源上避免版本错位。
补充说明:当前使用的
firebase_ml_vision插件已停止官方维护,若后续项目需要长期迭代,可逐步迁移到官方维护的ML Kit独立组件,本次调整仅解决当前版本下的构建冲突问题。
方案2:需要打包离线图像标签模型的场景
如果引入对应模型依赖的目的是将图像标签识别模型打包进APK、避免运行时动态下载,不需要删除该类依赖,只需要移除依赖上写死的旧版本号,让BOM自动分配兼容版本即可:
- 将原写死版本的依赖行
调整为不带版本号的写法:implementation 'com.google.firebase:firebase-ml-vision-image-label-model:17.0.2'
BOM 26.4.0会自动拉取和整套生态兼容的19.0.2版本模型依赖,该版本的底层依赖要求和项目内的vision-common 19.1.3完全兼容,不会触发版本校验报错。implementation 'com.google.firebase:firebase-ml-vision-image-label-model'
方案3:临时兜底(不推荐生产环境使用)
如果需要快速绕过构建校验,可以按照报错提示的配置,在app模块的build.gradle中添加禁用Google Services版本检查的配置:
googleServices { disableVersionCheck = true }
注意:该方案仅能跳过构建阶段的版本校验,实际运行时可能因为依赖版本不匹配出现无征兆崩溃,仅适合本地调试临时使用,不建议打包正式版本时使用。
构建前的兜底清理操作
调整完依赖配置后,需要清理旧的构建缓存避免干扰:
- 在项目根目录执行
flutter clean - 删除
android/.gradle、android/app/build两个缓存目录 - 进入android目录执行
./gradlew --refresh-dependencies刷新全量依赖缓存后,再重新执行构建。
内容的提问来源于stack exchange,提问作者Daniel Kang
相关产品推荐
相关产品推荐

