在Android开发中,android:exported 是一个用于定义组件(如Activity、Service、BroadcastReceiver、ContentProvider等)是否可以被其他应用访问的属性。在AndroidManifest.xml文件中,在<activity>, <service>, <receiver>, <provider>标签使用android:exported属性定义组件的可见性和可访问性。
<activity
android:name=".activity.GuideActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
android:exported 为 true:
- 组件可以被其他应用访问。
- 其他应用可以启动这个Activity,发送广播到这个BroadcastReceiver,或者绑定到这个Service。
- 对于某些组件(如Activity),如果没有明确设置 android:exported,那么默认值可能是 true,具体取决于Android版本和组件类型。
android:exported 为 false:
- 组件只能被定义该组件的应用访问。
- 其他应用无法直接访问这个组件。
- 提高了安全性,减少了潜在的攻击面。
从Android 12(API级别31)开始,系统开始更加严格地检查 android:exported 的值。如果系统检测到某个组件的 android:exported 值与其功能不符(例如,一个隐式Intent可以启动一个未声明为 exported=true 的Activity),或者绑定到一个未声明为exported的Service,那么应用可能会崩溃或在运行时遇到其他问题。为了确保应用的稳定性和安全性,应该明确设置 android:exported 的值,并确保与组件的实际用途相匹配。