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

Flutter(Android)中java.lang.SecurityException报错的解决方法咨询

解决Flutter Gallery启动时的java.lang.SecurityException报错

问题重现

在Android设备上启动Flutter Gallery示例应用时触发致命异常,报错信息如下:

E/AndroidRuntime(20352): FATAL EXCEPTION: SplitCompatBackgroundThread
E/AndroidRuntime(20352): Process: io.flutter.demo.gallery, PID: 20352
E/AndroidRuntime(20352): java.lang.SecurityException: io.flutter.demo.gallery: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
E/AndroidRuntime(20352):        at android.os.Parcel.createExceptionOrNull(Parcel.java:3069)
E/AndroidRuntime(20352):        at android.os.Parcel.createException(Parcel.java:3053)
E/AndroidRuntime(20352):        at android.os.Parcel.readException(Parcel.java:3036)
E/AndroidRuntime(20352):        at android.os.Parcel.readException(Parcel.java:2978)
E/AndroidRuntime(20352):        at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:6157)
E/AndroidRuntime(20352):        at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1913)
E/AndroidRuntime(20352):        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1853)
E/AndroidRuntime(20352):        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1841)
E/AndroidRuntime(20352):        at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:772)
E/AndroidRuntime(20352):        at com.google.android.play.core.listener.b.b(Unknown Source:27)
E/AndroidRuntime(20352):        at com.google.android.play.core.listener.b.e(Unknown Source:3)
E/AndroidRuntime(20352):        at com.google.android.play.core.splitcompat.m.run(Unknown Source:7)
(More stacktrace here)

预期应用能像Windows平台一样正常启动,但实际启动失败。

问题原因

这个报错是Android 12(API 31)及以上系统的安全限制导致的:系统要求所有动态注册的广播接收器必须显式指定RECEIVER_EXPORTED(允许其他应用触发)或RECEIVER_NOT_EXPORTED(仅自身触发)标记。而Flutter Gallery依赖的旧版本Google Play Core库未适配该要求,动态注册接收器时未添加对应标记,触发了SecurityException。

解决方案

方案1:升级Flutter SDK到最新稳定版

新版本Flutter已同步升级依赖的Play Core库,默认适配Android 12+的广播接收器要求。执行以下命令升级:

flutter upgrade

升级完成后,执行flutter clean清理缓存,再重新运行项目即可。

方案2:手动指定Play Core库的最新版本

若不想升级整个Flutter SDK,可在项目的android/app/build.gradle文件中强制指定Play Core的最新兼容版本:

dependencies {
    // 保留原有依赖,添加或替换Play Core版本
    implementation 'com.google.android.play:core:1.10.3' // 可使用更高稳定版本
}

修改后执行flutter clean,再重新构建运行应用。

方案3:临时适配(不推荐)

若上述方案暂时无法生效,可尝试在AndroidManifest.xml中添加SplitCompat版本配置作为临时 workaround,长期仍推荐升级依赖:

<application ...>
    <!-- 添加以下配置 -->
    <meta-data
        android:name="com.google.android.play.core.splitcompat.VERSION"
        android:value="1.10.3" />
</application>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:35:55