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

Flutter适配Android S+创建PendingIntent报FLAG_IMMUTABLE错误如何解决

Flutter适配Android S+ PendingIntent崩溃修复方案

该崩溃由Android 12(API 31)新增的PendingIntent强制校验规则触发:所有面向API31及以上的应用,创建PendingIntent时必须显式声明FLAG_IMMUTABLE或FLAG_MUTABLE标志位,缺失则直接抛出异常。修复按以下步骤操作:

一、修正自有业务代码

  • 排查项目中所有PendingIntent创建逻辑(包括getActivity、getBroadcast、getService、getForegroundService方法调用),按业务场景追加对应标志位:
    • 普通场景(点击通知跳转、定时任务触发、闹钟唤起等不需要动态修改PendingIntent内容的场景),统一使用官方推荐的FLAG_IMMUTABLE标志
    • 仅当业务依赖可变特性(通知内联回复、气泡功能、需要动态更新Intent参数的场景),才使用FLAG_MUTABLE标志
  • 兼容写法示例(以创建通知跳转PendingIntent为例):
val pendingIntentFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
} else {
    PendingIntent.FLAG_UPDATE_CURRENT
}
val clickPendingIntent = PendingIntent.getActivity(
    context,
    requestCode,
    jumpIntent,
    pendingIntentFlags
)

注意:FLAG_IMMUTABLE标志从API 23(Android 6.0)开始提供,低版本系统无需添加该标志,通过版本判断做兼容即可,避免低版本运行报错。

二、处理第三方依赖兼容问题

如果自有代码已经全部修正仍出现崩溃,基本是引入的第三方SDK/Flutter插件未适配API31规则导致,按以下方式处理:

  • 先将项目所有Flutter依赖升级到最新版本,主流官方插件(本地通知、推送、Firebase系列等)的高版本均已完成该适配
  • 若升级依赖后仍存在问题,可在android/app/build.gradle中强制引入适配API31的WorkManager依赖,大量未适配插件都是因为依赖了低版本androidx.work库触发崩溃,配置如下:
dependencies {
    // 强制使用已适配API31的WorkManager版本
    implementation 'androidx.work:work-runtime-ktx:2.7.1'
    // 原有其他依赖保持不变
}
  • 配置完成后执行flutter clean清理构建缓存,重新打包运行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:21:21