EMAS Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present]?
这个提示是因为在 Android API level 31(即 Android 12)及以上版本中,Google 对应用程序组件的导出设置进行了更严格的限制,如果应用程序组件定义了 intent filters,就必须显式设置 android:exported 属性,以指定组件是否可以被其他应用程序或者系统访问。
在 EMAS 中,如果您的应用程序目标平台为 Android API level 31 及以上版本,且应用程序组件定义了 intent filters,就会出现类似的警告提示,要求您显式设置 android:exported 属性。
要解决这个问题,您需要按照以下步骤进行:
打开您的项目中 AndroidManifest.xml 文件。
搜索包含 intent-filter 的组件,并添加 android:exported 属性。该属性的值可以为 true 或者 false,分别表示组件可以被其他应用程序访问或者只能被本应用程序访问。例如:
ini Copy
<category android:name="android.intent.category.LAUNCHER" />
打开 Android Studio,并打开您的项目。
在 Android Studio 的“Project”视图中,展开您的项目文件夹,并选择“app”->“manifests”->“AndroidManifest.xml”。
在 AndroidManifest.xml 文件中,单击鼠标右键,选择“Find Usages”(或者按 Ctrl+Shift+F7)。
在弹出的“Find Usages”对话框中,选择“Find All”,以查找所有使用了 intent filters 的组件。
在搜索结果中,检查每个组件是否已经设置了 android:exported 属性,如果没有设置,就按照上述步骤进行添加。
这个问题的意思是,如果你的应用程序针对Android 12(版本31)及以上版本进行定位,则当存在意图过滤器时,需要明确指定android:exported的值。这是因为从Android 12开始,Google引入了一些新的安全性特性来保护用户数据和隐私。其中一个重要的变化是,如果您的应用程序未明确指定android:exported的值,则默认情况下为false,这意味着您的应用程序将无法接收来自其他应用程序的隐式意图。
要解决这个问题,您需要在您的AndroidManifest.xml文件中,明确指定每个具有意图过滤器的组件的android:exported属性的值。如果您的组件不用于公共接口,则建议将其设置为false。如果您的组件需要公开给其他应用程序使用,则将其设置为true,并确保您的应用程序只公开您打算公开的组件。
在 Android 12 及以上版本中,Google 强制要求应用程序在使用 Intent 过滤器时必须显式声明 android:exported 值,以提高应用程序的安全性。如果您在 EMAS 中使用了 Targeting S+(即 targetSdkVersion 31 及以上),并且应用程序中存在 Intent 过滤器,则需要在 AndroidManifest.xml 文件中为每个 Intent 过滤器添加 android:exported 属性,并将其设置为 true 或 false。
由于 Android 12(targetSdkVersion=31) 引入了一些重要的安全变更,因此在使用 EMAS 时会出现 Targeting S+ 的警告。这是因为新的安全变更规定,在 AndroidManifest.xml 文件中必须为所有具有 Intent 过滤器的活动、服务、接收器和提供程序定义一个显式的 android:exported 值,以避免意外公开组件,从而导致安全漏洞。
如果您使用的是 EMAS 推送消息和深度链接组件,则需要按照以下步骤更新您的 AndroidManifest.xml 文件:
打开 AndroidManifest.xml 文件。 在要更新的组件中添加一个 android:exported 属性,并将其设置为 true 或 false。 根据您的应用程序需要设置 android:exported 的值,确保组件的公开方式符合安全要求。 以下是一个示例,展示如何在 AndroidManifest.xml 文件中为活动定义 android:exported 属性:
<activity android:name=".MainActivity" android:exported="false"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> 注意,如果 android:exported 设置为 false,则组件仅能被应用程序自身访问。如果要让其他应用程序或系统能够访问组件,则应将其设置为 true。
建议您了解更多有关 Android 12 的安全变更,并在升级您的应用程序之前进行全面测试。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。