问题描述
运行项目在version 31 以上的手机报错提示如下
Installation failed due to: ‘INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl24407910.tmp/base.apk (at Binary XML file line #20): com.snatik.matches.MainActivity: Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present’
原因分析:
看警告错误可以得知说在编译期间解析失败了,后面紧跟着提示了发生解析失败的文件路径com.snatik.matches.MainActivity
。大概意思是说Android 31+
版本为目标需要在存在意图过滤器时定义 android:exported
的显式值’。
解决方案:
按照提示查看清单文件发现确实没有exported
属性,补上属性之后编译就不会出现解析失败的情况了。
这里由于是主Activity入口所以exported
属性必须是true
,总之为了避免警告和在 Android 31+
版本中出现意外的行为,建议在清单文件中的每个 元素中显式地设置 exported
属性,以明确指定活动的访问权限。