android:exported needs to be explicitly specified for <activity>. 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.
时间: 2023-05-31 18:18:46 浏览: 1470
### 回答1:
在 Android 12 及更高版本中,当相关组件有意图过滤器定义时,应用程序需要显式指定 `android:exported` 的值。这是因为 Android 12 引入了更严格的安全性规则,以确保应用程序的组件只能被授权的应用程序或系统使用。
### 回答2:
自Android 12起,如果应用程序的组件具有意图过滤器定义,则需要明确指定`android:exported`的值。这是出于安全原因的考虑,以确保应用程序不会意外地外漏权限,从而导致数据泄漏或恶意行为。
`android:exported`是一个标记,用于告诉系统该组件是否允许从其他应用程序或权威实体访问。如果应用程序使用了意图过滤器,则应该将`android:exported`显式地指定为true或false,以明确指出组件是否应公开。
如果未指定`android:exported`,系统将默认为true。这意味着该组件可以由任何应用程序或系统访问,从而降低了应用程序的安全性。
因此,在Android 12中,如果组件具有intent过滤器定义,则必须明确指定`android:exported`的值,以确保组件的安全性。
由于这项政策的变化将影响应用程序的行为,开发人员需要及时更新他们的应用程序,以确保其符合最新的安全标准,并避免不必要的安全漏洞。
### 回答3:
在Android 12以上的版本中,当应用的组件(如activity、service、broadcast receiver和content provider等)定义了intent filter时,必须明确指定`android:exported`的值。这是由于在之前的Android版本中,默认情况下组件是可以被其他应用访问的,而且很多应用没有正确地限制组件的访问权限,导致安全问题的出现。
为了解决这个问题,从Android 12开始,Google强制要求应用在定义有intent filter的组件时显式地指定`android:exported`的值。如果没有指定该属性,编译器会报错并提示需要明确指定该属性的值。
`android:exported`属性指示一个组件是否可以被其他应用访问。它有两种取值:true和false。当取值为true时,表示该组件可以被其他应用访问;当取值为false时,表示该组件只能被本应用访问。因此,在定义有intent filter的组件时,应该根据具体需求指定`android:exported`的值,以保证应用的安全性。
需要注意的是,对于没有定义intent filter的组件(如内部使用的service或content provider等),可以不指定`android:exported`属性的值,编译器会默认将其设置为false。但是,为了保险起见,在业界实践中,仍然建议在所有组件中显式地指定`android:exported`的值。
总之,指定`android:exported`的值是一项重要的安全措施,是应用开发中需要注意的一个点,在Android 12以上的版本中更是必须遵守的规定。
阅读全文