开发者社区> 问答> 正文

EMAS Targeting S+ (version 31 and above) requires

EMAS Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present]?

展开
收起
真的很搞笑 2023-06-01 08:57:47 316 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    这个提示是因为在 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" />
    
    1. 保存 AndroidManifest.xml 文件,并重新编译和构建您的应用程序。 如果您不确定哪些组件需要设置 android:exported 属性,可以通过以下方式进行检查:

    打开 Android Studio,并打开您的项目。

    在 Android Studio 的“Project”视图中,展开您的项目文件夹,并选择“app”->“manifests”->“AndroidManifest.xml”。

    在 AndroidManifest.xml 文件中,单击鼠标右键,选择“Find Usages”(或者按 Ctrl+Shift+F7)。

    在弹出的“Find Usages”对话框中,选择“Find All”,以查找所有使用了 intent filters 的组件。

    在搜索结果中,检查每个组件是否已经设置了 android:exported 属性,如果没有设置,就按照上述步骤进行添加。

    2023-06-01 23:05:07
    赞同 展开评论 打赏
  • 这个问题的意思是,如果你的应用程序针对Android 12(版本31)及以上版本进行定位,则当存在意图过滤器时,需要明确指定android:exported的值。这是因为从Android 12开始,Google引入了一些新的安全性特性来保护用户数据和隐私。其中一个重要的变化是,如果您的应用程序未明确指定android:exported的值,则默认情况下为false,这意味着您的应用程序将无法接收来自其他应用程序的隐式意图。

    要解决这个问题,您需要在您的AndroidManifest.xml文件中,明确指定每个具有意图过滤器的组件的android:exported属性的值。如果您的组件不用于公共接口,则建议将其设置为false。如果您的组件需要公开给其他应用程序使用,则将其设置为true,并确保您的应用程序只公开您打算公开的组件。

    2023-06-01 19:33:29
    赞同 展开评论 打赏
  • 在 Android 12 及以上版本中,Google 强制要求应用程序在使用 Intent 过滤器时必须显式声明 android:exported 值,以提高应用程序的安全性。如果您在 EMAS 中使用了 Targeting S+(即 targetSdkVersion 31 及以上),并且应用程序中存在 Intent 过滤器,则需要在 AndroidManifest.xml 文件中为每个 Intent 过滤器添加 android:exported 属性,并将其设置为 true 或 false。

    2023-06-01 14:07:40
    赞同 展开评论 打赏
  • 由于 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 的安全变更,并在升级您的应用程序之前进行全面测试。

    2023-06-01 09:30:46
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
基于阿里巴巴以及合作伙伴的最佳实践,围绕大前端、云原生领域的相关技术热点(小程序、Serverless、应用中间件、低代码、DevOps)展开行业探讨,与开发者一起探寻云原生时代应用研发的新范式。
相关文档: 移动研发平台
问答排行榜
最热
最新

相关电子书

更多
五天玩转EMAS Serverless 立即下载
EMAS平台全景介绍 立即下载
低代码开发师(初级)实战教程 立即下载