从Android 12开始,四大组件中的android:exported属性必须显式设置

在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,以确保组件的正常功能。