移除OneSignal库后出现Targeting S+需指定FLAG_IMMUTABLE错误
问题根源
从错误栈可以明确,当前错误并非来自你自己编写的PendingIntent代码,而是androidx.work.impl.utils.ForceStopRunnable内部创建PendingIntent时未指定FLAG_IMMUTABLE或FLAG_MUTABLE标志,属于旧版WorkManager未适配Android 12+(API 31+)的遗留问题。
可行解决办法
确保WorkManager依赖完全更新并无冲突
你已添加work-runtime-ktx:2.9.1,但需确认项目中没有其他依赖间接引入旧版WorkManager。执行Gradle命令查看依赖树:./gradlew app:dependencies若发现旧版(如2.7.x及以下)WorkManager依赖,在对应第三方库的依赖配置中添加排除规则,示例:
implementation('第三方库坐标') { exclude group: 'androidx.work', module: 'work-runtime' }修正自身代码的PendingIntent标志判断逻辑
你当前代码判断的是Build.VERSION_CODES.M(API 23),但FLAG_IMMUTABLE/FLAG_MUTABLE的强制要求是从**Android 12(API 31,Build.VERSION_CODES.S)**开始的,正确代码应为:PendingIntent.getBroadcast(context, 123, alarmIntent, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT } else { PendingIntent.FLAG_UPDATE_CURRENT } )注意:仅当PendingIntent需要支持内回复、气泡等可变功能时才用
FLAG_MUTABLE,否则优先使用FLAG_IMMUTABLE。排查其他第三方库的适配情况
移除OneSignal后,仍可能存在其他第三方库(如推送、闹钟、日历类)使用未适配Android 12+的PendingIntent。将所有涉及PendingIntent的依赖升级到最新稳定版。清理并重建项目
执行Gradle清理与构建操作,确保依赖更新生效:./gradlew clean build
内容的提问来源于stack exchange,提问作者menasoft

