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

Flutter配置compileSdkVersion为31时Android12设备安装App失败

Android 12(API 31)下Flutter项目Firebase Messaging导致安装失败解决方案

问题根因

Android 12(API 级别31)新增强制规则:所有配置了intent-filter的应用组件(Activity、Service、广播接收器)必须显式声明android:exported属性,未声明的应用会直接触发INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误,安装失败。
当前使用的Flutter 1.22.4版本配套的旧版firebase-messaging插件未适配该规则,插件内置清单中FlutterFirebaseMessagingService组件配置了intent-filter但缺失android:exported属性,因此仅在compile/target SDK设为31时触发问题,降到30时系统不做该强制校验所以可正常运行。


方案1:主清单覆盖配置(零依赖升级,最快生效)

不需要修改Flutter版本、不需要升级插件,直接在项目主清单中重写对应服务的配置,覆盖插件的默认清单即可:

  • 打开项目路径下的android/app/src/main/AndroidManifest.xml文件
  • 在<application>标签内部添加如下服务声明:
<service
    android:name="io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

该服务仅用于接收应用内的Firebase推送消息,不需要对外暴露,设置android:exported="false"完全符合功能逻辑,不会影响推送接收能力。

  • 配置完成后执行flutter clean清理旧构建缓存,重新编译运行即可正常安装。
    补充:如果后续其他第三方插件报同类exported属性缺失错误,都可以用同样方式在主清单中重写对应组件、补全属性,不需要修改插件源码。

方案2:升级依赖适配(正式发版长期维护推荐)

如果需要长期适配Android 12+版本要求,建议做依赖升级适配:

  • 优先将Flutter升级到2.10及以上稳定版本,同步将所有Firebase系列插件升级到适配API 31的版本,新版插件已默认在清单中补全android:exported属性,无需手动配置。
  • 如果暂时不想升级Flutter大版本,可单独将firebase-messaging插件升级到11.4.4及以上兼容版本,同时检查项目内其他第三方插件是否有适配API 31的更新,同步升级即可。

临时降级方案说明

将compileSdkVersion、targetSdkVersion降到30仅可作为本地临时调试的绕过手段,应用商店从2022年起已要求新上架、更新的应用必须targetSdkVersion 31及以上,该方案无法用于正式发版场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:30:50