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

适配API 31时出现android:exported未明确指定的合并错误求助

适配API 31时OneSignal广播接收器的合并错误解决方法

适配API 31(Android 12及更高版本)时,项目会出现以下三个清单合并错误:

  • 元素<receiver#com.onesignal.GcmBroadcastReceiver>需明确指定android:exported
  • 元素<receiver#com.onesignal.BootUpReceiver>需明确指定android:exported
  • 元素<receiver#com.onesignal.UpgradeReceiver>需明确指定android:exported

原因是Android 12及以上版本要求:如果组件定义了intent filter,必须为android:exported指定明确的布尔值(true或false)。

解决方法

方法一:升级OneSignal SDK到最新版本

OneSignal官方已经针对API 31做了适配,新版本的SDK会自动为这三个广播接收器添加正确的android:exported属性。只需更新项目中的OneSignal依赖版本即可。

方法二:手动在清单文件中覆盖接收器定义

如果暂时无法升级SDK,可在项目的AndroidManifest.xml中手动添加这三个接收器的定义,明确指定android:exported属性:

<!-- 覆盖GcmBroadcastReceiver,需设为true以接收外部广播 -->
<receiver
    android:name="com.onesignal.GcmBroadcastReceiver"
    android:exported="true">
    <intent-filter>
        <!-- 保留原有intent filter的内容,无需修改 -->
    </intent-filter>
</receiver>

<!-- 覆盖BootUpReceiver,仅处理应用内部广播,设为false -->
<receiver
    android:name="com.onesignal.BootUpReceiver"
    android:exported="false">
    <intent-filter>
        <!-- 保留原有intent filter的内容,无需修改 -->
    </intent-filter>
</receiver>

<!-- 覆盖UpgradeReceiver,仅处理应用内部广播,设为false -->
<receiver
    android:name="com.onesignal.UpgradeReceiver"
    android:exported="false">
    <intent-filter>
        <!-- 保留原有intent filter的内容,无需修改 -->
    </intent-filter>
</receiver>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:31:16