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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:15:40