Google Play因QUERY_ALL_PACKAGES权限问题拒绝应用上架的解决咨询
这种情况真的挺闹心的——明明自己没在Manifest里加QUERY_ALL_PACKAGES权限,却被Google Play揪着不放,甚至用了tools:node="remove"标记也没见效,十有八九是你项目里的第三方依赖库偷偷给你加上了这个权限,很多SDK会默认引入一些权限,你自己没留意到。给你整理几个实用的排查和解决步骤:
先揪出“罪魁祸首”:打开Android Studio的Terminal,执行
./gradlew app:dependencies(Windows系统用gradlew.bat app:dependencies),看看所有依赖树里有没有哪个库声明了这个权限;或者直接把你打包好的APK拖进Android Studio,用“Analyze APK”功能查看最终合并后的Manifest文件,确认这个权限到底是从哪来的。确保移除标记真的生效:很多人用
tools:node="remove"没效果,是因为漏了在Manifest根标签里引入tools命名空间。记得在<manifest>标签里加上xmlns:tools="http://schemas.android.com/tools",然后再完整声明移除权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove" />
这样Gradle在合并Manifest的时候才会彻底把这个权限删掉。
检查是否有合规的替代方案:Google Play对
QUERY_ALL_PACKAGES的管控非常严格,如果你确实需要查询已安装应用,别想着硬用这个权限,试试更细分的权限,比如QUERY_PACKAGES_WITH_SIGNATURES(查询和你应用签名一致的包),或者直接用PackageManager的过滤条件,只查询你业务需要的特定包名,这样既满足功能,又符合政策要求。打包后再验证一遍:修改完所有配置后,重新打包APK,再用“Analyze APK”检查最终的Manifest,确认
QUERY_ALL_PACKAGES已经完全消失了,再提交到Google Play。如果还是被拒,就去申诉页面详细说明情况:比如“我的应用及所有依赖已彻底移除该权限,仅使用XX权限实现XX功能,符合权限政策”,最好能附上合并后Manifest的截图佐证。
备注:内容来源于stack exchange,提问作者MunterMan

