应用因QUERY_ALL_PACKAGES权限被拒,但未在代码及第三方API中使用该权限
解决Google Play因QUERY_ALL_PACKAGES权限拒审的问题
1. 揪出隐式引入权限的来源
你自己代码没加不代表第三方SDK没加——很多广告、统计、分享类依赖会悄悄在Manifest里声明QUERY_ALL_PACKAGES,或是通过Gradle的Manifest合并机制自动带入。用这条命令生成最终合并后的Manifest文件:
./gradlew app:mergeDebugAndroidManifest
然后到app/build/intermediates/merged_manifests/debug/AndroidManifest.xml里搜索QUERY_ALL_PACKAGES,就能定位到是哪个依赖搞的鬼。
2. 移除多余权限,改用窄范围可见性方案
- 要是查到是第三方依赖引入的权限,在你自己的AndroidManifest.xml里加这段代码强制移除:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:node="remove" />
注意要在Manifest根标签里加上xmlns:tools="http://schemas.android.com/tools"命名空间,否则tools:node属性不会生效。
- 如果你确实需要和特定应用交互(比如调起微信、支付宝),别用全权限,改用
<queries>标签精准声明需求:
<queries> <!-- 允许查询微信包 --> <package android:name="com.tencent.mm" /> <!-- 允许查询支持文本分享的应用 --> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="text/plain" /> </intent> </queries>
3. 提交时给Google明确说明
在Play控制台的提交备注里直接写清楚:
- 应用从未主动使用
QUERY_ALL_PACKAGES权限 - 已排查并移除所有隐式引入的该权限
- 所有必要的应用可见性需求都通过
<queries>标签实现
内容的提问来源于stack exchange,提问作者Avdhesh Kishor
相关产品推荐
相关产品推荐

