生成签名APK/Bundle时Gradle Manifest合并错误求助
解决OneSignal接收器未声明android:exported及图标警告问题
一、处理OneSignal接收器的android:exported属性错误
这些接收器是OneSignal SDK通过Manifest合并机制自动添加的,本地清单中不会直接显示。需显式声明并指定android:exported属性以适配Android 12+的强制要求:
- 在你的
AndroidManifest.xml中添加以下接收器声明,根据组件用途设置exported值:
<receiver android:name="com.onesignal.GcmBroadcastReceiver" android:exported="true" tools:node="merge"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </receiver> <receiver android:name="com.onesignal.BootUpReceiver" android:exported="false" tools:node="merge"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> </receiver> <receiver android:name="com.onesignal.UpgradeReceiver" android:exported="false" tools:node="merge"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> </receiver>
GcmBroadcastReceiver需要接收外部推送事件,设为true;BootUpReceiver和UpgradeReceiver仅处理应用内部广播,设为false;tools:node="merge"确保与SDK自带的Manifest配置合并时,保留你指定的属性。
- (推荐)升级OneSignal SDK到最新稳定版,新版本已原生适配Android 12+的
exported要求,可省去手动声明的步骤。更新build.gradle中的依赖:
dependencies { implementation 'com.onesignal:OneSignal:[最新稳定版本号]' }
二、处理application@android:icon替换警告
该警告源于多模块/SDK的图标声明冲突,解决方法:
在AndroidManifest.xml的<application>标签中显式指定图标,并添加tools:replace强制覆盖其他来源的声明:
<application android:icon="@mipmap/ic_launcher" <!-- 替换为你的实际图标资源路径 --> tools:replace="android:icon" ...> <!-- 其他应用配置内容 --> </application>
最后验证
执行以下命令清理项目后重新构建发布版:
./gradlew clean ./gradlew assembleRelease # 若生成App Bundle则执行 bundleRelease
内容的提问来源于stack exchange,提问作者DWA
相关产品推荐
相关产品推荐

