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

Android 31系统应用启动失败 未指定PendingIntent强制Flag异常

异常产生原因

这个崩溃和你写的业务代码无关,从堆栈信息可以直接定位到问题出在androidx.work(Jetpack WorkManager)组件的内部实现:
Android 12(API 31)系统新增了强制校验规则,所有创建PendingIntent的代码必须显式声明FLAG_IMMUTABLE(不可变更,官方推荐)或FLAG_MUTABLE(可变更)标识,否则就会抛出该IllegalArgumentException异常。
而你当前项目依赖的WorkManager版本低于2.7.0,该版本发布时还没有适配Android 12的这条规则,内部创建PendingIntent时没有添加对应的标识,所以只要应用targetSdkVersion≥31,运行在Android 12及以上系统就会触发崩溃。
哪怕你自己没有主动调用过PendingIntent或者WorkManager的相关接口,也可能是你引入的其他第三方SDK内部依赖了低版本的WorkManager,间接触发了这个问题。

解决方案

方案一:升级WorkManager到适配版本(推荐)

直接在你项目的模块级build.gradle文件中,强制指定WorkManager的版本为2.7.0及以上,该版本之后官方已经完成了Android 12的适配:

dependencies {
    // 普通Java项目用这个
    implementation "androidx.work:work-runtime:2.8.1"
    // Kotlin项目可以用KTX版本
    // implementation "androidx.work:work-runtime-ktx:2.8.1"
}

如果是第三方SDK间接引入的低版本WorkManager,你可以添加全局强制版本规则,覆盖传递依赖的版本:

configurations.all {
    resolutionStrategy {
        force "androidx.work:work-runtime:2.8.1"
    }
}

修改完成后可以执行依赖树查看命令验证版本是否生效:

  • Linux/Mac:./gradlew :app:dependencies
  • Windows:gradlew.bat :app:dependencies
    确认输出的依赖树中WorkManager的版本已经是2.7.0及以上即可。

方案二:临时规避(不推荐)

如果暂时不需要适配高版本targetSdk,可以把build.gradle中的targetSdkVersion降到30以下,就能绕过Android 12的这条强制校验规则。但目前主流应用商店都要求targetSdk≥31才能上架,所以这个方案只能用来临时验证,最终还是建议用方案一解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:01