Android 12适配安全组件导出设置`android:exported` 指定显式值”

如何解决编译错误:“面向 Android 12 及更高版本的应用需要为 android:exported 指定显式值”问题

在这里插入图片描述

如果您的应用针对 Android12,则文档说:

如果您的应用面向 Android 12 并包含使用Intent 过滤器的活动、服务或广播接收器,
则您必须显式声明这些应用组件的属性android:exported

因此,我为所有在 AndroidManifest.xml 中使用意图过滤器的组件显式声明android:exported了属性,但仍然因编译错误而失败:

清单合并失败并出现多个错误,请参阅日志错误:当相应组件定义了意图过滤器时,
需要针对 Android 12 及更高版本的应用程序为 `android:exported` 指定显式值

发生了什么 ??

为什么所有的activity、server和Receiver都配置exported了,还报这个错误?

您需要检查“合并”清单

您的 APK 文件只能包含一个AndroidManifest.xml文件,但您的 Android Studio 项目可能包含多个文件——由主要源集、构建变体和导入的库提供。因此,在构建您的应用程序时,Gradle 构建会将所有清单文件合并为一个打包到您的 APK 中的清单文件。

提示:使用合并清单视图预览合并清单的结果并查找冲突错误。

因此,您还需要检查导入的库,并且要预览合并的清单,您可以使用编辑器底部的Merged Manifest 选项卡。

在这里插入图片描述

此时您需要将 targetSdkVersion暂时降低到 30 才能进行编译。

我的项目中,我发现下面显示的这些来自外部库的组件没有为 `android:exported` 指定显式值,即使这些组件声明了意图过滤器。

来之

来自外部库的这些组件声明了意图过滤器,但未指定导出的属性

当我在 Merged Manifest 视图中单击这些组件时,我发现这些组件来自androidx.test:core:1.3.0。

但是,我的项目确实明确地实现了这个库,所以我必须找到其他依赖于“androidx.test:core:1.3.0”的库

替换库的提示

总结

如果您指定了exported 属性也编译失败,原因可能是您的外部库。要找出这一点,您可以使用合并清单视图进行检查。要找到合适版本的库替换或者升级。

猜你喜欢

转载自blog.csdn.net/L_201607/article/details/122640944