You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者钟智强

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:33:19