已移除QUERY_ALL_PACKAGES权限仍被Google Play判违规如何解决
核心原因
这类手动删除权限后仍被Google Play驳回的问题,90%以上都不是主工程Manifest配置写错导致的,本质是接入的三方SDK、AAR依赖内部隐式声明了QUERY_ALL_PACKAGES权限,Manifest合并时自动将该权限带入了最终安装包。你添加的tools:node="remove"如果配置位置错误、未生效,最终打出的AAB/APK里依然会携带该权限——Google Play的审核扫描直接读取上传包二进制文件内的最终Manifest,不会校验你工程里的主Manifest源码内容。
排查步骤
- 优先检查合并后的最终Manifest,不要仅核对工程内的主Manifest文件。在Android Studio中打开主工程的AndroidManifest.xml,点击底部的「Merged Manifest」选项卡,全局搜索
QUERY_ALL_PACKAGES,可以直接定位到该权限是由哪个依赖库引入的,显示具体的SDK来源。注意:必须切换到你提交商店对应的正式构建变体、对应渠道包的合并视图检查,不要用debug环境的视图做判断,debug和release包的依赖规则、Manifest合并逻辑可能存在差异。
- 直接扫描正式签名包验证权限声明,不要以设备端显示的权限列表为准:部分安卓系统会对高targetSdkVersion的应用做权限兼容隐藏,设备上看不到权限不代表包内没有声明。直接用Android SDK自带的aapt工具扫包校验:
Windows环境执行:aapt dump badging <正式版AAB/APK文件路径> | findstr "QUERY_ALL_PACKAGES"
Mac/Linux环境执行:aapt dump badging <正式版AAB/APK文件路径> | grep "QUERY_ALL_PACKAGES"
如果命令有返回结果,就说明安装包内确实携带该权限,之前的移除配置未生效。 - 检查权限移除配置的正确性:很多开发者添加的移除节点要么没在Manifest根节点声明tools命名空间,要么把uses-permission节点写在了application标签内部,导致配置根本不参与Manifest合并。正确配置参考如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名"> <!-- 权限移除节点需作为manifest的直接子节点,不要嵌套到application标签内部 --> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove" /> <application android:name=".App" ...> <!-- 其他组件配置 --> </application> </manifest>
解决方案
- 定位到引入权限的三方SDK后,优先将该SDK升级到官方已移除
QUERY_ALL_PACKAGES的最新版本:此前大量文件类、广告类、设备统计类SDK都因Google合规要求推送过移除该权限的版本,升级后重新打包校验即可。如果对应SDK长期未更新适配,确认上述移除配置正确后重新打包,用aapt验证权限已被移除即可提交。 - 如果aapt扫描确认包内完全无该权限,提交后仍被自动驳回,直接走Google Play Console的申诉通道,上传aapt扫包结果截图、合并Manifest截图,明确说明当前提交版本未声明该权限,申请人工复核。这类自动扫描的误判,人工审核一般1-2个工作日即可过审。
- 提交审核说明时无需额外提及旧版本曾使用该权限的历史,仅明确说明当前版本无对应权限、附上检测证据即可,避免触发自动审核的额外拦截规则。
内容的提问来源于stack exchange,提问作者jamal
相关产品推荐
相关产品推荐

