Flutter Android端Mapbox GL报java.lang.IncompatibleClassChangeError的解决方法
问题原因
这个java.lang.IncompatibleClassChangeError异常的核心原因是Google Play Services定位库的版本冲突:
- 旧版
com.google.android.gms:play-services-location中,FusedLocationProviderClient是类; - 新版该库中,它被重构为接口;
- 你的Flutter项目里,Mapbox GL插件与其他依赖(如官方location插件、第三方插件)分别依赖了不同版本的该库,导致编译后字节码类型定义冲突,Android运行时无法匹配。
可行解决办法
1. 统一定位库版本
在Android模块的build.gradle(路径通常为android/build.gradle)中,强制所有依赖使用相同版本的定位库:
allprojects { repositories { // 保留你的仓库配置 } configurations.all { resolutionStrategy.force 'com.google.android.gms:play-services-location:21.0.1' // 选择稳定的新版本,建议21.x及以上 } }
注:版本号可参考Mapbox插件文档推荐,或选用当前最新稳定版,确保与Mapbox插件兼容。
2. 排查并解决冲突依赖
运行命令查看项目中所有依赖的play-services-location版本,定位冲突来源:
./gradlew app:dependencies
在输出中搜索play-services-location,根据结果调整:
- 若为第三方插件引入旧版本,尝试升级该插件至最新版;
- 若无法升级插件,在该插件的依赖配置中排除旧版定位库:
dependencies { implementation('com.example:some-plugin:1.0.0') { exclude group: 'com.google.android.gms', module: 'play-services-location' } }
3. 彻底清理缓存并重构
执行以下步骤清除项目缓存:
- 运行
flutter clean - 删除Android模块下的
.gradle文件夹(路径android/.gradle) - 删除项目根目录的
.dart_tool文件夹 - 重新执行
flutter pub get和flutter run
4. 更新Mapbox插件版本
确保使用的是最新版或官方推荐稳定版的mapbox_gl插件,旧版插件可能存在依赖兼容问题,在pubspec.yaml中更新版本后重新获取依赖。
内容的提问来源于stack exchange,提问作者钟智强
相关产品推荐
相关产品推荐

