2026-09-09 · Permissions & API

软件包(应用)可见性与 QUERY_ALL_PACKAGES 政策——广泛可见性 vs 定向应用目录访问(2026)

1. 从设备上查询到的已安装应用目录属于个人数据和敏感用户数据。从 Android 11(API 30)起,系统默认过滤应用能看到的其他软件包,queryIntentActivities()、getPackageInfo()、getInstalledApplications() 等接口不再默认返回完整目录。广泛可见性——几乎能发现设备上任何及所有已安装软件包——对应 QUERY_ALL_PACKAGES 权限,Google Play 对其限制很严:仅当面向用户的核心功能必须知晓设备上任何及所有应用、或必须与之互操作时,才允许使用。只要产品用有限、有针对性的查询就能运作,就必须优先走定向查询。主要依据:Play 管理中心帮助《访问敏感信息的权限和 API》中的「软件包(应用)查看权限」一节(https://support.google.com/googleplay/android-developer/answer/16558241?hl=zh-Hans)。允许使用情形另见《使用广泛的软件包(应用)可见性 (QUERY_ALL_PACKAGES) 权限》(https://support.google.com/googleplay/android-developer/answer/10158779?hl=zh-Hans)。

2. 仅当应用在 Android 11 及以上设备上以 API 30 或更高版本为目标时,QUERY_ALL_PACKAGES 才会生效。帮助把核心功能定义为应用的主要用途:如果不具备搜索设备上所有应用的能力,应用就会「损坏」或无法使用;该核心用途及其核心特性必须在商店说明里醒目载明。允许的使用情形是那些必须发现任何及所有已安装应用、以便了解情况或进行互操作的产品——设备搜索、杀毒应用、文件管理器和浏览器。只打开某一个应用的快捷方式、只分享到某一个即时通讯、或「用 Chrome 打开」按钮,都不够格。帮助还列了少量临时例外(例如核心用途是现金赌博、且法规强制地理围栏而需要广泛可见性的应用;以及可验证的核心用途是处理受监管金融工具交易的专用银行 / 数字钱包应用,且仅出于安全目的)。以任何个人贷款、信贷或协助获取个人贷款为目的的使用,明确不属于该例外。

3. 默认使用有限、定向的软件包可见性。在 Android 11+ 上,用清单里的 <queries> 元素声明你真正需要的软件包、Intent 或 Provider,而不是申请 QUERY_ALL_PACKAGES。有限可见性是政策优先路径:只查询应用实际会启动、搜索或管理的那些应用。如果用范围更具体的软件包可见性声明就能正常运作,则不得使用 QUERY_ALL_PACKAGES。平台文档:Android Developers《Android 上的软件包可见性过滤》(https://developer.android.com/training/package-visibility)。只要 <queries> 覆盖了交互,就不要申请 QUERY_ALL_PACKAGES。

4. 用其他方法逼近 QUERY_ALL_PACKAGES 那种广泛可见性级别,也受同样限制。政策只允许把这类做法用于面向用户的核心功能,以及与借此发现的应用进行互操作;「软件包(应用)查看权限」的禁止项写明:不得通过政策未明确允许的方法获得广泛应用可见性。把未公开 API、无障碍抓取、文件系统遍历或其他旁路拼出完整目录,当成政策问题,而不是备用方案。如果审核人员能在没有获批 QUERY_ALL_PACKAGES 声明的情况下看到全部软件包,预期会被拒审或下架。

5. 产品确实需要 QUERY_ALL_PACKAGES 时,上架前必须在 Play 管理中心提交权限声明表单(政策 → App 内容 → 权限和 API,或清单里带了该权限时 Play 展示的高风险 / 敏感权限声明)。同时声明 QUERY_ALL_PACKAGES 以及所有其他高风险权限。供审核用的说明要写清:为何核心功能必须知晓任何及所有应用、<queries> 为何不够、目录数据如何使用。若你改变了该权限的用法,必须按最新、准确的信息修订声明。清单里留着该权限却没有准确表单、或用途经不起核验的应用可能被下架。欺骗性使用或未声明使用,可能导致应用被暂停或开发者账号被终止。

6. 通过 Play 分发的应用所查询的应用目录数据,不得出售,也不得分享给其他方用于分析或广告变现。这条禁令不取决于同意文案怎么写。不要把软件包列表发给广告网络、归因服务商或设备图谱合作方。只访问核心功能所需的最少数据,能留在设备上就不要外传,并把该列表按个人信息和敏感信息处理——即使获准使用 QUERY_ALL_PACKAGES,仍须遵守用户数据政策,包括醒目披露和征求同意。帮助列出的无效使用包括:权限与核心用途没有直接关系(点对点分享只有在作为核心用途时才算允许);获取数据是为了出售;把目录用于分析或广告变现;以及用侵扰度更低的可见性方法就能完成的任务。

7. 常见拒审与通常修复:(a)清单里有 QUERY_ALL_PACKAGES,但功能用 <queries> 就能表达——去掉该权限,改为声明具体软件包或 Intent;(b)声明缺失、过期,或描述的用途与代码不符——更新政策 → App 内容后重提;(c)商店页写的是单一用途工具,二进制却枚举全部软件包——要么改列表,要么不该要这个权限;(d)SDK 悄悄加入 QUERY_ALL_PACKAGES(安全、反欺诈或「应用发现」套件)——卸掉或换掉该 SDK;(e)目录被转发到分析或广告——停止外传;(f)没有该权限却用旁路逼近广泛可见性——删掉旁路;(g)个人贷款或信贷应用想靠金融安全例外过关——该例外不适用。

8. 上传前清单:在真机或模拟器上确认 Android 11+ / target API 30+ 的过滤行为;优先 <queries>,并在开启软件包可见性过滤的环境下测试;仅当面向用户的核心用途必须知晓任何及所有应用时才申请 QUERY_ALL_PACKAGES;填完 Play 管理中心声明并与产物保持一致;绝不把目录出售或分享给分析 / 广告;不要带上逼近广泛可见性的替代手法;SDK 或功能有变时,重读 https://support.google.com/googleplay/android-developer/answer/16558241?hl=zh-Hans 的「软件包(应用)查看权限」一节,以及允许使用情形文章 https://support.google.com/googleplay/android-developer/answer/10158779?hl=zh-Hans。

需要专家帮助?联系KappS获取专属解答 →
← 返回FAQ列表