Android 12 Merged Manifest报错android:exported未指定如何解决
问题原因
你的报错指向的是第三方AltBeacon库中的StartupBroadcastReceiver组件,并非你自己声明的Activity。你自己的清单里已经给带intent filter的Activity加了android:exported属性,但你引入的AltBeacon库旧版本没有适配Android 12的规则,其内部的广播接收器带intent filter却没显式声明exported属性,合并manifest的时候就会触发该错误。
修复方案
方案1:升级AltBeacon库(优先推荐)
AltBeacon官方从2.19版本开始已经完成Android 12适配,你只需要把项目中AltBeacon库的依赖升级到2.19及以上的稳定版本即可解决问题。
修改Module级build.gradle中的依赖声明:
dependencies { // 替换原有旧版本的beacon库依赖 implementation 'org.altbeacon:android-beacon-library:2.20.0' }
方案2:手动覆盖组件属性(无法升级库时使用)
如果项目有兼容要求不能升级库,可以在你自己的AndroidManifest.xml中显式声明该广播接收器,指定exported属性,manifest合并时会优先采用你本地的配置。
- 先给manifest根节点添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.xxxxxx.android_sample">
- 在
标签内添加该接收器的声明:
<receiver android:name="org.altbeacon.beacon.startup.StartupBroadcastReceiver" android:exported="false" tools:node="merge" />
exported取值说明:如果不需要外部应用触发该广播接收器,设为false即可;如果有外部交互需求,再设为true。
通用排查方案
如果修复后仍有同类报错,可以在Android Studio中打开AndroidManifest.xml,点击底部的「Merged Manifest」标签,查看所有合并后的组件,找到所有带intent filter却没声明exported的组件,用上述手动覆盖的方式逐个处理即可。
内容的提问来源于stack exchange,提问作者braop
相关产品推荐
相关产品推荐

