在Android 12及更高版本中,对于Android的四大组件(Activity、Service、Broadcast Receiver、Content Provider),如果它们配置了intent过滤器(intent-filter),则开发者必须在AndroidManifest.xml文件中显式声明android:exported
属性。这个属性的作用是指示该组件是否可以被其他应用程序的组件启动或与之交互。
- 当
android:exported
设置为true
时:表示该组件可以被其他应用启动或与之交互。这对于需要被其他应用调用的组件(如支付SDK、消息推送服务等)是必要的。 - 当
android:exported
设置为false
时:表示该组件只能被同一应用或具有相同用户ID的应用启动或与之交互,从而提高了应用的安全性。
如果不设置android:exported
属性,应用将无法在Android 12及更高版本的设备上安装。以下是一个在Service组件中设置android:exported
属性的示例:
xml
<!-- 后台服务定义,用于处理特定后台任务,禁止外部应用调用 -->
<service android:name="com.example.app.backgroundService"
android:exported="false">
<intent-filter>
<action android:name="com.example.app.START_BACKGROUND" />
</intent-filter>
</service>
在这个例子中,backgroundService
服务配置了intent过滤器,并且显式地将android:exported
属性设置为false
,表示这个服务只能被同一应用或具有相同用户ID的应用启动。
因此,对于需要被其他应用调用的组件,开发者应该将其android:exported
属性设置为true
,以确保组件的正常功能。