将targetSdkVersion设为31后Flutter应用在Android12崩溃求助
解决Flutter应用targetSdkVersion 31下WorkManager重复初始化崩溃问题
问题根源
java.lang.IllegalStateException: WorkManager is already initialized 明确指向重复初始化WorkManager的冲突。Android 12(targetSdkVersion 31)对组件初始化的校验更严格,原本在低版本中被隐藏的重复初始化问题会触发崩溃。
分步解决方案
1. 禁用WorkManager自动初始化
在AndroidManifest.xml中添加元数据,阻止系统自动初始化WorkManager,将控制权收归手动:
<application ...> <!-- 禁用自动初始化 --> <meta-data android:name="androidx.work.workmanager.disableAutoInitialization" android:value="true" /> </application>
2. 全局唯一手动初始化
创建自定义Application类,在onCreate()中仅执行一次WorkManager初始化:
class MyFlutterApp : FlutterApplication() { override fun onCreate() { super.onCreate() // 配置并初始化WorkManager val workConfig = Configuration.Builder().build() WorkManager.initialize(this, workConfig) } }
在AndroidManifest.xml中绑定这个自定义Application:
<application android:name=".MyFlutterApp" ...> <!-- 其他组件配置 --> </application>
3. 强制统一WorkManager依赖版本
执行./gradlew app:dependencies查看依赖树,若存在多版本WorkManager冲突,在app级build.gradle中强制统一版本:
configurations.all { resolutionStrategy.force 'androidx.work:work-runtime-ktx:2.7.0' resolutionStrategy.force 'androidx.work:work-runtime:2.7.0' }
4. 排查第三方插件冲突
部分Flutter插件会内置WorkManager并自行初始化,检查你的插件列表:
- 优先更新所有插件到最新版本
- 若某插件明确存在WorkManager初始化逻辑,查看其适配Android 12的文档,或暂时移除插件验证是否解决问题
验证操作
- 清理项目缓存:
./gradlew clean - 重新构建:
flutter build apk - 在Android 12设备上安装测试
内容的提问来源于stack exchange,提问作者YASH PATHAK
相关产品推荐
相关产品推荐

