Flutter安卓定位应用升级后触发Google Play服务类兼容错误
解决Flutter应用Google Play服务定位类/接口不兼容异常
报错原因分析
报错java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.FusedLocationProviderClient, but class was expected的核心原因是Google Play服务定位库版本冲突:
- 旧版本的
play-services-location中,FusedLocationProviderClient是类实现; - 新版本中该组件被重构为接口;
- 项目里的依赖(比如Naver地图SDK)仍绑定旧版定位库,而Flutter升级后引入的其他依赖使用了新版本,导致运行时类型不匹配触发异常。
解决方案
1. 统一Google Play服务版本
在android/build.gradle的ext块中定义全局统一的Google Play服务版本,确保所有相关依赖对齐该版本:
buildscript { ext { compileSdkVersion = 33 minSdkVersion = 21 targetSdkVersion = 33 // 指定稳定版Google Play服务版本,可根据官方文档更新 googlePlayServicesVersion = "21.0.1" } // 保留原文件其他配置 }
2. 排除冲突依赖并手动指定版本
找到引入冲突的第三方依赖(比如Naver地图SDK),在android/app/build.gradle中排除其自带的旧版定位库,再手动添加统一版本的库:
dependencies { // 排除Naver地图SDK自带的冲突定位库 implementation('com.naver.maps:map-sdk:2.10.0') { // 替换为你使用的Naver SDK实际版本 exclude group: 'com.google.android.gms', module: 'play-services-location' } // 添加指定版本的Google Play定位库 implementation "com.google.android.gms:play-services-location:$googlePlayServicesVersion" // 保留原文件其他依赖配置 }
3. 强制覆盖Flutter插件依赖版本(可选)
如果项目使用的Flutter定位插件(如geolocator)依赖的定位库版本不一致,可在根目录pubspec.yaml中通过dependency_overrides强制统一:
dependency_overrides: geolocator_android: ^4.1.0 # 替换为对应插件版本,需确保其依赖的play-services-location版本与全局指定版本匹配
4. 彻底清理并重新构建
执行以下命令清理项目缓存并重新构建:
flutter clean flutter pub get cd android && ./gradlew clean && cd .. flutter build apk
内容的提问来源于stack exchange,提问作者seung hwan Son
相关产品推荐
相关产品推荐

