Android12集成Estimote BLE信标SDK时Manifest合并报错求助
问题背景
在targetSdkVersion为31(Android 12)及以上的应用中集成Estimote低功耗蓝牙信标SDK时,触发Manifest合并失败,报错如下:
Manifest merger failed : android:exported needs to be explicitly specified for element <receiver#com.estimote.proximity_sdk.api.TriggerBroadcastReceiver>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined.
已尝试的两种方案均未生效:
- 声明基类
android.content.BroadcastReceiver并配置android:exported="false",依旧报相同合并错误 - 直接声明SDK内的
com.estimote.proximity_sdk.api.TriggerBroadcastReceiver配置exported属性,IDE提示Unresolved class 'TriggerBroadcastReceiver'错误
核心原因
- Manifest合并工具以组件的全限定类名作为唯一匹配键,只有和SDK清单中声明的组件名完全一致的节点,才会被识别为同一组件做属性合并。声明基类
BroadcastReceiver属于完全不同的组件节点,不会作用到SDK内置的TriggerBroadcastReceiver上,自然无法通过校验。 - IDE提示类找不到,是因为该接收器属于SDK内部非公开类,IDE静态索引时无法在当前模块的公开类路径中检索到,不代表打包阶段该类不存在。
解决步骤
- 先在App模块的AndroidManifest.xml根节点添加tools命名空间声明:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你自己的应用包名"> <!-- 其余原有清单节点保持不变 -->
- 在
<application>标签内添加如下接收器配置,强制覆盖SDK清单中对应组件的exported属性,同时忽略IDE的类找不到静态检查:
<receiver android:name="com.estimote.proximity_sdk.api.TriggerBroadcastReceiver" android:exported="false" tools:replace="android:exported" tools:ignore="MissingClass" />
- 同步Gradle后重新构建即可,该配置会在Manifest合并阶段直接给SDK内置的接收器补充上符合Android 12要求的exported属性,不会触发类找不到的运行时错误。
- 长期适配可以直接将Estimote Proximity SDK升级到官方适配Android 12的最新版本,无需手动添加覆盖规则。
内容的提问来源于stack exchange,提问作者cruxi
相关产品推荐
相关产品推荐

