You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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静态索引时无法在当前模块的公开类路径中检索到,不代表打包阶段该类不存在。
解决步骤
  1. 先在App模块的AndroidManifest.xml根节点添加tools命名空间声明:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="你自己的应用包名">
<!-- 其余原有清单节点保持不变 -->
  1. 在<application>标签内添加如下接收器配置,强制覆盖SDK清单中对应组件的exported属性,同时忽略IDE的类找不到静态检查:
<receiver
    android:name="com.estimote.proximity_sdk.api.TriggerBroadcastReceiver"
    android:exported="false"
    tools:replace="android:exported"
    tools:ignore="MissingClass" />
  1. 同步Gradle后重新构建即可,该配置会在Manifest合并阶段直接给SDK内置的接收器补充上符合Android 12要求的exported属性,不会触发类找不到的运行时错误。
  2. 长期适配可以直接将Estimote Proximity SDK升级到官方适配Android 12的最新版本,无需手动添加覆盖规则。

内容的提问来源于stack exchange,提问作者cruxi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:42:24