升级Android API30至33后上传应用遇android:exported报错求助
解决API 33升级后Play Console的android:exported报错问题
问题背景
将应用从Android API 30升级到API 33后,上传APK/Android App Bundle至Play Console时收到报错:
You uploaded an APK or Android App Bundle without the 'android:exported' property set
虽然已为自有组件设置android:exported属性,但错误仍存在。合并错误信息显示,以下OneSignal相关组件未明确指定该属性(Android 12及以上版本要求,包含intent filter的组件必须显式声明android:exported):
<activity#com.onesignal.NotificationOpenedActivityHMS><receiver#com.onesignal.FCMBroadcastReceiver><receiver#com.onesignal.BootUpReceiver><receiver#com.onesignal.UpgradeReceiver>
解决方案
方案1:升级OneSignal SDK(推荐)
OneSignal的新版本已适配Android 12+,会自动为内部组件添加android:exported属性。直接将OneSignal SDK升级到4.6.0及以上版本,即可解决该问题,无需手动修改Manifest。
方案2:手动在Manifest中声明组件(临时方案)
如果暂时无法升级SDK,可在自己的AndroidManifest.xml的<application>标签内手动声明这些组件,显式设置android:exported属性,并通过tools:node="merge"确保与SDK中的Manifest合并生效:
<!-- 手动配置OneSignal组件的android:exported属性 --> <activity android:name="com.onesignal.NotificationOpenedActivityHMS" android:exported="true" tools:node="merge" /> <receiver android:name="com.onesignal.FCMBroadcastReceiver" android:exported="true" tools:node="merge"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </receiver> <receiver android:name="com.onesignal.BootUpReceiver" android:exported="true" 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" />
属性说明:
NotificationOpenedActivityHMS:处理通知打开逻辑,需对外暴露,设为trueFCMBroadcastReceiver:接收Firebase消息,需对外暴露,设为trueBootUpReceiver:接收开机/应用替换广播,需对外暴露,设为trueUpgradeReceiver:仅内部处理升级逻辑,设为false
完成配置后,重新构建APK/AAB即可正常上传至Play Console。
内容的提问来源于stack exchange,提问作者Shaikh Rayyan Ahmed
相关产品推荐
相关产品推荐

