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

Flutter获取位置权限时触发IncompatibleClassChangeError异常求助

Flutter位置权限申请时IncompatibleClassChangeError异常解决方法

问题背景

在Android 13设备上,使用location: ^4.4.0和firebase_messaging: ^14.1.2插件时,接受位置权限会触发以下异常:

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/~~vK3x6kuSR8MsWIHWo0p-pg==/com.wst.occser-5pgr4NMzu9vj5rO5C1Dcew==/base.apk!classes3.dex)
E/AndroidRuntime(15597):        at com.lyokone.location.FlutterLocation.startRequestingLocation(FlutterLocation.java:422)
E/AndroidRuntime(15597):        at com.lyokone.location.FlutterLocation.onRequestPermissionsResultHandler(FlutterLocation.java:131)
E/AndroidRuntime(15597):        at com.lyokone.location.FlutterLocation.onRequestPermissionsResult(FlutterLocation.java:122)
E/AndroidRuntime(15597):        at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:777)
E/AndroidRuntime(15597):        at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:409)
E/AndroidRuntime(15597):        at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onRequestPermissionsResult(FlutterActivityAndFragmentDelegate.java:757)
E/AndroidRuntime(15597):        at io.flutter.embedding.android.FlutterFragment.onRequestPermissionsResult(FlutterFragment.java:915)
E/AndroidRuntime(15597):        at io.flutter.embedding.android.FlutterFragmentActivity.onRequestPermissionsResult(FlutterFragmentActivity.java:549)
E/AndroidRuntime(15597):        at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8619)
E/AndroidRuntime(15597):        at android.app.Activity.dispatchActivityResult(Activity.java:8476)
E/AndroidRuntime(15597):        at android.app.ActivityThread.deliverResults(ActivityThread.java:5560)
E/AndroidRuntime(15597):        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5606)
E/AndroidRuntime(15597):        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
E/AndroidRuntime(15597):        at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
E/AndroidRuntime(15597):        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
E/AndroidRuntime(15597):        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
E/AndroidRuntime(15597):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2374)
E/AndroidRuntime(15597):        at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime(15597):        at android.os.Looper.loopOnce(Looper.java:233)
E/AndroidRuntime(15597):        at android.os.Looper.loop(Looper.java:344)
E/AndroidRuntime(15597):        at android.app.ActivityThread.main(ActivityThread.java:8248)
E/AndroidRuntime(15597):        at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(15597):        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:589)
E/AndroidRuntime(15597):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1071)
E/Parcel  (15597): Reading a NULL string not supported here.
I/Quality (15597): SlowBinder: com.wst.occser to android.app.IActivityManager cost= 284 code= 7
I/Process (15597): Sending signal. PID: 15597 SIG: 9

原因分析

异常由Google Play Services依赖版本冲突导致:旧版location插件依赖的play-services-location将SettingsClient定义为类,而firebase_messaging引入的新版play-services-location中SettingsClient已改为接口,两者定义不匹配引发错误。

解决步骤

1. 强制统一Play Services依赖版本

在android/build.gradle的allprojects块中添加版本强制配置,确保所有插件使用同一版本的play-services-location:

allprojects {
    repositories {
        // 保留原有仓库配置
    }
    configurations.all {
        resolutionStrategy {
            // 选择与firebase_messaging兼容的版本,如21.0.1
            force 'com.google.android.gms:play-services-location:21.0.1'
        }
    }
}

2. 升级location插件到兼容版本

location: ^4.4.0版本较旧,未适配新版Play Services。升级到最新稳定版(如^6.0.0及以上),新版本已修复该兼容性问题:

# 修改pubspec.yaml中的依赖
dependencies:
  location: ^6.0.0 # 替换为最新稳定版
  firebase_messaging: ^14.1.2

3. 清理缓存并重新构建

执行以下命令清除Flutter和Android缓存,确保依赖生效:

flutter clean
flutter pub get
cd android && ./gradlew clean
cd .. && flutter run

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:50:39