升级Android SDK至31后出现FLAG_IMMUTABLE/MUTABLE相关报错求助
解决方案
核心原因
你遇到的问题是因为旧版Firebase Messaging/Core库(17.6.0/16.0.8)未适配Android 12(SDK 31)的PendingIntent创建规则——Android 12要求所有PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE,而这些旧版本库内部创建PendingIntent时未添加该标记。
推荐解决方案:升级Firebase依赖
这是最稳妥且官方支持的解决方式,Google在后续版本的Firebase库中已修复该适配问题,同时旧版本存在安全漏洞,建议优先升级:
- 替换你的Firebase依赖为最新稳定版,推荐使用Firebase BOM统一管理版本,避免版本冲突:
// 移除旧的单独版本依赖,添加Firebase BOM implementation platform('com.google.firebase:firebase-bom:32.7.0') // 无需指定版本,BOM会自动匹配兼容版本 implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-core'
- 同步Gradle后,清理并重建项目,即可解决该报错。
备选方案:若无法升级Firebase
如果你因特殊原因暂时无法升级Firebase,可尝试以下步骤:
- 确保项目依赖足够新的AndroidX Core库,它会在底层处理PendingIntent的flag适配:
implementation 'androidx.core:core:1.10.1'
该版本的AndroidX Core会自动为未指定flag的PendingIntent添加FLAG_IMMUTABLE(符合官方推荐),覆盖旧库的调用逻辑。
- 检查本地通知相关的代码/依赖,确保所有手动创建的PendingIntent都添加了正确的flag(如果有):
// 示例:创建PendingIntent时添加FLAG_IMMUTABLE PendingIntent pendingIntent = PendingIntent.getActivity( context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE );
内容的提问来源于stack exchange,提问作者cinaarss
相关产品推荐
相关产品推荐

