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

Android自定义权限广播开发报Unresolved reference: Manifest错误

问题场景

应用内实现了两层广播接收器:第一层用于接收外部SDK传入的数据,收到数据后会向应用内部的第二层广播发送Intent。
AndroidManifest.xml中已做如下权限配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xxx">

<permission
        android:name="com.xxx.permission.BR_PERMISSION_BLUEDOT"
        android:label="BR_PERMISSION_BLUEDOT"
        android:protectionLevel="dangerous" />

<uses-permission android:name="com.xxx.permission.BR_PERMISSION_BLUEDOT" />

外部SDK对接的广播接收器onReceive方法中,发送广播的代码如下:

context.sendBroadcast(intent, com.xxx.Manifest.permission.BR_PERMISSION_BLUEDOT)

内部广播接收器位于Fragment中,注册逻辑如下:

private fun configureReceiver() {
    val filter = IntentFilter()
    //添加过滤Action
    filter.addAction(BluedotGeoTriggerReceiver.INTENT_ON_ZONE_INFO_UPDATE)
    filter.addAction(BluedotGeoTriggerReceiver.INTENT_ON_ZONE_ENTRY_EVENT)
    filter.addAction(BluedotGeoTriggerReceiver.INTENT_ON_ZONE_EXIT_EVENT)
    //注册带权限校验的广播接收器
    baseContext.registerReceiver(ftxBluedotBroadcastReceiver, filter, com.xxx.Manifest.permission.BR_PERMISSION_BLUEDOT, null)
}

项目构建时抛出如下编译错误:

Unresolved reference: Manifest

错误原因

这个编译错误是自动生成的Manifest类引用失败导致的,核心诱因有3种:

  • 代码里写的com.xxx包名和应用真实的命名空间不匹配:AGP 7.0及以上版本中,Manifest、BuildConfig等自动生成类的存放路径由模块级build.gradle中的namespace字段决定,不再依赖AndroidManifest.xml根节点的package属性,如果namespace和代码里写的com.xxx不一致,就会找不到类。
  • 错误导入了JDK自带的java.util.jar.Manifest类,这个类是Java用来读取jar包清单文件的,不存在permission相关常量,会触发引用错误。
  • 修改完权限声明后没有重新编译项目:Manifest类是编译阶段自动生成的,新增自定义权限后如果没执行过编译,类还没生成,就会报找不到引用。
解决方案

按以下顺序排查处理即可:

  1. 确认模块真实命名空间:AGP 7.0+查看模块级build.gradle(或build.gradle.kts)中的namespace值,低版本AGP查看AndroidManifest.xml根节点的package属性值,把代码里两处com.xxx.Manifest的包名前缀替换成真实的命名空间即可。
  2. 检查当前Kotlin/Java文件的import列表,如果存在import java.util.jar.Manifest这条导入,直接删除。
  3. 执行Android Studio菜单栏的Build > Clean Project,等待清理完成后再执行Build > Rebuild Project,重新生成编译期自动生成的类,即可正常引用。
  4. 如果以上操作后还是存在引用问题,可以直接用权限名字符串替代类引用,把两处com.xxx.Manifest.permission.BR_PERMISSION_BLUEDOT替换为字符串"com.xxx.permission.BR_PERMISSION_BLUEDOT",功能完全一致,不会受自动生成类路径的影响。

补充说明:配置的自定义权限protectionLevel为dangerous,在Android 6.0及以上系统中,除了manifest声明外,还需要在运行时动态申请该权限,否则广播收发的权限校验会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:09:16