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

升级到Android12后集成OneSignal出现android:exported显式声明报错如何解决

问题根因

Android 12 要求所有带有intent-filter的四大组件(Activity、Service、Receiver、ContentProvider)必须显式指定android:exported属性,你自己声明的应用组件已经正确配置了该属性,报错来自OneSignal旧版本SDK内部自带的组件未适配Android 12规范,Manifest合并时检测到这些第三方组件带intent-filter但未声明android:exported,因此抛出合并失败错误。

解决步骤

方案1:升级OneSignal SDK(优先推荐)

OneSignal从4.6.0及以上版本已经完成Android 12适配,你只需要在app模块的build.gradle中将OneSignal依赖升级到最新稳定版,即可自动解决Manifest合并问题,原有manifestPlaceholders配置不需要修改。

方案2:手动覆写SDK组件配置(不适合升级SDK时使用)

如果业务逻辑限制无法升级SDK,可以在你自己的AndroidManifest.xml中显式声明OneSignal内部缺失android:exported属性的组件,强制覆盖SDK的Manifest配置:

<!-- 覆写OneSignal Firebase消息接收Service -->
<service
    android:name="com.onesignal.FcmIntentService"
    android:exported="false"
    tools:node="merge">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<!-- 覆写OneSignal广播接收器 -->
<receiver
    android:name="com.onesignal.GcmBroadcastReceiver"
    android:exported="true"
    tools:node="merge">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="${applicationId}" />
    </intent-filter>
</receiver>

如果还有其他组件报同样错误,按照相同格式声明,根据组件的使用场景设置android:exported值即可:

  • 组件需要被外部应用(系统服务、其他APP)调用时设置为true
  • 组件仅允许应用内部调用时设置为false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:27:01