Flutter项目无法访问ListenableFuture类的依赖冲突问题排查
解决Flutter项目中CameraX与Guava ListenableFuture依赖冲突问题
核心问题原因
你遇到的错误是因为Guava的listenablefuture被替换成了9999.0-empty-to-avoid-conflict-with-guava这个空包,导致CameraX需要的ListenableFuture类找不到。Flutter项目中,插件引入的依赖会和你手动添加的CameraX依赖产生冲突,普通的Gradle配置如果没放在正确层级,可能无法覆盖插件的依赖规则。
具体解决方法
1. 确保Gradle配置作用到所有模块
Flutter项目的Android部分有两个关键的build.gradle:
- 根目录
android/build.gradle:全局配置,影响所有子模块(包括Flutter插件) android/app/build.gradle:App模块配置,只影响当前模块
推荐在**全局android/build.gradle**的subprojects块中统一配置依赖规则,这样能覆盖所有Flutter插件的依赖:
subprojects { configurations.all { // 强制使用有效的ListenableFuture版本,替换空包 resolutionStrategy.force "com.google.guava:listenablefuture:1.0" // 排除所有引入的空版本ListenableFuture exclude group: 'com.google.guava', module: 'listenablefuture' } }
2. 模块级依赖补充(可选)
如果全局配置不生效,在android/app/build.gradle的dependencies块中直接添加有效依赖并强制:
dependencies { // 强制引入ListenableFuture有效版本 implementation("com.google.guava:listenablefuture:1.0") { force = true } // 确保CameraX核心依赖正确引入 implementation("androidx.camera:camera-core:1.2.3") implementation("androidx.camera:camera-camera2:1.2.3") implementation("androidx.camera:camera-lifecycle:1.2.3") }
3. 清理缓存,彻底重建
配置完成后必须清理缓存,否则旧依赖会残留:
- 执行Flutter清理命令:
flutter clean - 进入Android目录执行Gradle清理:
cd android && ./gradlew clean build - 或者在Android Studio中点击
File -> Invalidate Caches... -> Invalidate and Restart
4. 替代写法:绕开ListenableFuture冲突
如果依赖冲突实在无法解决,可以用Coroutine异步处理替代原生的addListener,避免直接依赖ListenableFuture:
// 在你的AndroidCameraView类中,使用lifecycleScope处理异步 lifecycleScope.launch { val cameraProvider = ProcessCameraProvider.getInstance(context).await() bindPreview(cameraProvider, lifecycleOwner) }
需要添加Coroutine依赖到android/app/build.gradle:
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
内容的提问来源于stack exchange,提问作者Karzel
相关产品推荐
相关产品推荐

