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

Flutter应用启动崩溃:预期类却找到SettingsClient接口

Flutter应用启动崩溃:IncompatibleClassChangeError 解决方案

崩溃核心原因

报错Found interface com.google.android.gms.location.SettingsClient, but class was expected本质是依赖版本冲突:SettingsClient在Google Play服务中是接口类型,但代码中被当作类调用,通常是geolocator插件与项目中其他Google Play服务依赖的版本不匹配,导致类/接口定义不一致。

崩溃日志

Fatal Exception: java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.SettingsClient, but class was expected (declaration of 'com.google.android.gms.location.SettingsClient' appears in /data/app/com.test.app-AqARftTPn1XJdiHWXXbkBw==/base.apk!classes6.dex)
       at com.baseflow.geolocator.location.FusedLocationClient.isLocationServiceEnabled(FusedLocationClient.java:83)
       at com.baseflow.geolocator.location.GeolocationManager.isLocationServiceEnabled(GeolocationManager.java:45)
       at com.baseflow.geolocator.MethodCallHandlerImpl.onIsLocationServiceEnabled(MethodCallHandlerImpl.java:138)
       at com.baseflow.geolocator.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:62)
       at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
       at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
       at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
       at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(:12)
       at android.os.Handler.handleCallback(Handler.java:873)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:201)
       at android.app.ActivityThread.main(ActivityThread.java:6810)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

解决步骤

  • 统一Google Play服务版本:在android/build.gradle的ext块中指定固定版本,强制所有依赖使用该版本:

    buildscript {
        ext {
            playServicesLocationVersion = "21.0.1"
            // 其他Google服务依赖版本也可在此统一配置
        }
        // 其余原有配置保留
    }
    
  • 更新geolocator插件:在pubspec.yaml中升级geolocator到最新稳定版,执行flutter pub get同步依赖:

    dependencies:
      geolocator: ^latest_version
    
  • 清理构建缓存:清除旧编译文件,避免缓存残留导致的版本问题:

    flutter clean
    cd android && ./gradlew clean
    cd .. && flutter build apk
    
  • 排查依赖树:执行flutter pub deps查看完整依赖关系,若发现其他依赖引入冲突版本的Google Play服务,通过exclude规则手动排除。

内容的提问来源于stack exchange,提问作者Sumit Saurabh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:05:18