适配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
相关产品推荐
相关产品推荐

