Google Play提示某些项目有intent 过滤器,但没有“android:exported”属性

由于最近在谷歌上发布Android应用时需要项目的最低SDK API版本在31以上(支持Android12),项目在提高SDK API到31之后提交就出现问题提示:

您上传的 APK 或 Android App Bundle 内含活动、活动别名、服务或广播接收器,这些项目有 intent 过滤器,但没有“android:exported”属性设置。此文件无法在 Android 12 或更高版本上安装。

在AndroidManifest.xml文件中的activityservice注册时如果使用到了<intent-fliter>标签,就必须为该组件设置 android:exported = "true|false"(设置了<intent-fliter>标签的组件一般情况下exported设置为true)

例如:

 查看自己项目中的AndroidManifest.xml文件,将所有带<intent-fliter>标签的组件添加上android:exported="true"后重新签名打包提交即可

如果自己项目中的AndroidManifest.xml全部修改完后提交到谷歌后还是提示没有申明exported属性,那么有可能是自己项目中使用的第三方SDK的原因。

如果是下载SDK本地依赖的形式引入到项目中就如同修改自己项目的配置文件一般,为使用<intent-fliter>标签的组件添加adnroid:exported="true"后再打包提交

如果是通过Gradle 集成SDK,第三方SDK中有些activity、service中使用了<intent-fliter>标签但没有添加android:exported也会无法发布

这时候需要先rebuild,之后到项目中的app-build-intermediates-merge​​​​​​​_mainfest下的AndroidManifest.xml,这个文件是合并完成后的配置文件,第三方SDK中的组件注册也会在文件中出现

 找到之后打开配置文件,查看哪些组件使用了<intent-fliter>标签但是又没有设置android:exported属性(有些组件有android:exported="false",但全局搜索到的却没有配置exported,这种还是要处理)

例如:merge-manifest中的CheckService服务

第三方SDK中的CheckService服务

 将该组件复制到项目本身的AndroidManifest.xml中,添加上android:exported="true",之后重新打包提交即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值