Flutter3集成Mapbox导航Android S+报PendingIntent标志错误
根因定位
你之前排查WorkManager依赖的方向完全错误,本次崩溃和WorkManager、你的业务代码没有任何关系。
flutter_mapbox_navigation ^0.0.26 绑定的原生Mapbox Navigation SDK为旧版本,其内部com.mapbox.android.telemetry.AlarmSchedulerFlusher类创建广播PendingIntent时,未按Android 12(API31)及以上系统的强制要求添加FLAG_IMMUTABLE或FLAG_MUTABLE标志,直接触发系统抛出IllegalArgumentException,后续连锁导致MapboxTripNotification初始化失败、应用断开连接。
修复方案
按优先级从高到低选择即可:
- 方案1:强制覆盖Mapbox Telemetry依赖版本(无需修改插件源码,推荐)
Mapbox官方已在mapbox-android-telemetry:6.3.0版本修复该适配问题,直接在你项目的android/app/build.gradle的dependencies块中添加强制依赖配置,覆盖插件引入的有bug的旧版本库即可:
配置完成后在项目根目录执行dependencies { // 之前添加的work-runtime依赖可以保留,替换为稳定版即可,无需使用alpha版本 implementation("androidx.work:work-runtime-ktx:2.7.1") // 强制使用修复了Android12适配问题的telemetry版本 implementation("com.mapbox.mapboxsdk:mapbox-android-telemetry:6.3.0") { force = true } }flutter clean清除构建缓存,重新打包安装即可正常运行。 - 方案2:若方案1出现依赖冲突,修改本地缓存的插件源码
- 进入本地Pub缓存路径下的
flutter_mapbox_navigation-0.0.26/android/目录,打开该目录下的build.gradle文件 - 在依赖配置中排除旧版本telemetry库,手动引入修复版本:
implementation("com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.42.6") { exclude group: 'com.mapbox.mapboxsdk', module: 'mapbox-android-telemetry' } implementation "com.mapbox.mapboxsdk:mapbox-android-telemetry:6.3.0" - 同样执行
flutter clean后重新构建即可。
- 进入本地Pub缓存路径下的
- 方案3:临时调试兜底方案(不推荐用于正式上架包)
将项目android/app/build.gradle中的targetSdkVersion从31及以上降到30,系统将不再强制校验PendingIntent的flag,可临时绕过崩溃,但该方案不符合国内主流应用商店targetSdkVersion >=31的上架要求,仅可用于本地开发调试。
注意事项
- 每次修改依赖配置后必须执行
flutter clean,否则旧构建缓存中残留的bug类仍会被打包进APK,导致修复不生效 - 若修复后仍出现MapboxTripNotification相关的PendingIntent同类报错,可额外添加配置强制将
com.mapbox.mapboxsdk:mapbox-android-navigation版本指定为0.42.7,该版本同步修复了通知模块的Android12适配问题 - 无需反复切换work-runtime版本,该依赖与本次崩溃无关联
内容的提问来源于stack exchange,提问作者Said Isa
相关产品推荐
相关产品推荐

