Android 12适配安全组件导出设置`android:exported` 指定显式值”
教你如何解决编译错误:“面向 Android 12 及更高版本的应用需要为 `android:exported` 指定显式值”问题Error: Apps targeting Android 12 and higherare required to specify an explicit value for `android:exported` when the corresponding comp
如何解决编译错误:“面向 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”的库。
替换库的提示
所以我不得不查找和替换依赖于 androidx.test:core:1.3.0 的库。
总结
如果您指定了exported 属性也编译失败,原因可能是您的外部库。要找出这一点,您可以使用合并清单视图进行检查。要找到合适版本的库替换或者升级。
更多推荐
所有评论(0)