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
相关产品推荐
相关产品推荐

