receiver android:exported="false"
时间: 2023-07-02 11:17:25 浏览: 154
这是一个 AndroidManifest.xml 文件中的一个组件的属性。具体来说,这是一个 receiver 组件的属性,用于指定该组件是否可以被其它应用程序调用。当该属性的值为 "false" 时,该组件只能被当前应用程序内的其它组件调用,不能被其它应用程序调用。这可以提高应用程序的安全性。如果该属性的值为 "true",则该组件可以被其它应用程序调用,但也会增加应用程序被攻击的风险。
相关问题
Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported`
### 关于 `android:exported` 属性的要求
对于目标平台为 Android 12 及更高版本的应用程序,在编译过程中如果未为具有意图过滤器的组件(如 Activity、Service 或 BroadcastReceiver)显式声明 `android:exported` 属性,则会出现错误提示:Manifest merger failed : 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.[^1]
这意味着开发者需要明确指出应用程序中的每个组件是否可以被其他应用程序启动或访问。这不仅适用于带有 Intent Filter 的组件,而且从 Android 13 开始,即使是没有 Intent Filter 的四大组件也需要定义该属性[^3]。
#### 设置方法
为了满足这一要求,可以在 AndroidManifest 文件中相应地配置各个组件:
```xml
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- 对于不需要外部应用直接调用的服务 -->
<service
android:name=".MyBackgroundService"
android:exported="false"/>
<!-- 广播接收者同样适用 -->
<receiver
android:name=".BootCompletedReceiver"
android:exported="true">
<intent-filter>
<!-- ... -->
</intent-filter>
</receiver>
```
上述 XML 片段展示了如何通过设置 `android:exported=true|false` 来控制哪些组件能够接受来自其他应用程序的消息请求。当值设为 true 时表示允许跨进程通信;而 false 则表示仅限内部使用,不允许外界随意访问。
安卓14版本报错one of receiver_exported or
在Android开发中,遇到 "one of receiver_exported or exportedReceiver must be true" 这样的错误通常是因为你在创建BroadcastReceiver组件时忘记设置它的export属性。在AndroidManifest.xml文件中,如果你声明了一个BroadcastReceiver,它需要有一个export属性,表示这个接收器是否应该对外部应用可见。如果receiver_exported设为true,意味着该接收器可以由其他应用程序注册;如果是false,那么它只能由当前应用程序内部使用。
正确的配置应该是这样的:
```xml
<receiver android:name=".YourBroadcastReceiver"
android:exported="true"> <!-- 或者 false, 根据需求 -->
<intent-filter>
<!-- ... -->
</intent-filter>
</receiver>
```
如果receiver_exported为false,并试图从外部应用注册该接收器,就会引发这个错误。检查并确认你的BroadcastReceiver配置是否匹配了你的使用场景。
阅读全文