“允许该应用读取您的已安装应用列表吗?”
这个弹框,安卓用户基本都见过。拒绝吧,有的App当场罢工甚至闪退;同意吧,又隐约觉得不对劲——我一个记账软件、一个背单词App,凭什么要知道我还装了别的什么?
10月5日,知乎上一篇《Android权限保护失效与applist挖掘》把这份"不对劲"坐实了:安卓从Android 11开始费劲建立的那道"应用列表保护",被一行常规配置绕了过去。这不是某个黑产漏洞,而是谷歌自家的机制缝隙。知乎
先别急着骂App流氓。这篇把三件事讲清楚:你的装机清单到底值多少钱;谷歌的门为什么没锁住;以及"拒绝"和"同意"之间,普通安卓用户真实的取舍在哪。
一、一份装机清单,能拼出一个人的财务、健康、信仰与生活半径
在Android 11之前,任何App都能向系统要一份完整的已安装应用清单。广告和追踪公司早就把"装机清单"当成一类个人身份信息在用——光凭它就能推断年龄段、性别、居住区域、财务状况、通勤习惯,甚至消费能力。
拆开看,这份清单的每一项都对应着一笔画像生意:
银行、券商、加密交易类App,指向资产规模;
贷款、信用卡管理类App,指向现金流和资金饥渴度;
备孕、心理咨询、性病查询类App,指向健康状况里最不愿公开的部分;
相亲软件在不在装,指向感情状态;
扫地机器人、咖啡机控制端在不在,指向你家有几台智能设备、消费层级如何。
单看某一个App知道这些,像是"被偷看";连起来看,这是广告行业最廉价的兴趣标签来源。所以监管层面的定性并不含糊:2021年四部门发布的《常见类型移动互联网应用程序必要个人信息范围规定》给39类常见App划定了必要个人信息范围,"已安装应用列表"不在任何一类的必要信息里;工信部历年针对App侵权的通报里,"未经同意读取设备已安装应用列表"一直是高频问题项。国内相关实施指南更是直接把"应用软件列表信息"归入敏感个人信息——因为它体现用户的兴趣、偏好和行为习惯,可以直接用来画像和定向推送。知乎

作为对照:纯血鸿蒙2024年发布时,把"读取已安装应用列表"列入禁止开放的9类不合理权限,当时微博上这条话题有五千多个赞。而隔壁安卓这边的故事,要灰色得多。微博
二、谷歌建了五年的门,和那行一直开着的侧门
Android 11引入了"软件包可见性过滤":默认情况下,App只能看到系统给的有限集合。确实需要看全量清单的,必须申请 QUERY_ALL_PACKAGES 权限——被谷歌列为高风险权限,要说明用途、走人工审核。谷歌Play政策页写得很直白:从用户设备上查询到的已安装应用目录属于"私人敏感信息",只有为实现核心功能所必需时才放行。
承诺听着很清楚。但西班牙隐私分析机构Appicaptor扫了Google Play排名前2000的应用之后,给出的实际分布是:
行为 | 占比 |
|---|---|
完全不碰应用列表 | 0.7% |
只看一部分系统应用(正常互调) | 超70% |
老老实实走谷歌审核拿到全量权限 | 4.6% |
绕开门禁拿到完整清单 | 24.1% |
用"漏洞"的,是走正规流程的六倍左右。而且绕道者里91%直接调用了取全量列表的写法。

绕道用的就是开头那"一行配置":安卓官方的 queries 声明机制里,App可以声明"我想找能响应 MAIN 这个动作的应用"。MAIN是应用启动入口的标准声明,几乎所有有桌面图标的App都声明它——所以这一句等于合法地"把有桌面图标的App全列出来"。它不需要任何权限,因此不用向用户和谷歌交代动机,更不会触发人工审核。文章里那个实验数字很扎眼:过滤前后的清单差距,差的90个全是没桌面图标的底层系统组件,用户自己装的App,一个不少。

谷歌对这项研究的回应是:通过 intent action 查询包名属于"按设计工作"(working as intended),不认为是安全问题。但谷歌自己的政策文档又把同一份数据定义为"个人敏感用户数据"。同一份数据、两条通路、两套标准。更耐人寻味的细节是:谷歌自家广告SDK的官方示例代码里,就用了这种宽泛的intent查询写法——开发者照抄示例,顺手就拿到了远超所需的可见性。这项研究不是博客爆料,它在ESORICS 2025的MIST workshop做过报告,论文《Permission Granted? How Android’s App List Protection Fails in Practice》已由Springer出版。知乎
还有个结构性豁免让很多"它怎么知道我装了XX"的惊吓现场没那么邪乎:targetSdkVersion低于30的老App不受可见性过滤管辖,它们本来就在规则之外。很多App"准确识别出你装了另一个App",第一反应是被偷看,实际情况往往只是它太老,压根没进新规则的管辖。知乎
三、不弹框也能拼出清单:五层侧信道
更要紧的是,目标其实未必是"完整清单"。很多时候对方只要知道"某个App你装没装、最近还在不在用"就够了——而这条路根本不经过弹框。按取证成本从低到高排,大致五层:
文件路径:共享存储里各App留下的目录名往往直接带包名,目录存在与否,几乎等价于"这个App装过",不需要任何权限;
文件活跃度:目录的最后修改时间、体积增长,能告诉你这个App最近有没有在用——“装了不用"和"天天打开”,是两类人、两套广告价;
运行时探测:特定包名对应的进程、服务、通知、网络请求出现得频不频繁;
接口试探:拿 action 或包名逐个问系统"这个能不能处理",靠返回结果反推;
授权旁路:你给过"使用情况访问"的App,能拿到全部使用时长与频次;无障碍服务能读屏;通知监听能拿到每条通知来自哪个包。这几样都是活跃度的富矿,而且用户往往不记得自己授权过。

清单到手之后,除了画像广告,还被拿去干两件事:归因反作弊(装机结构高度重合的设备群是典型作弊特征),以及云厂商风控产品明码标价的"群控设备检测"——正常人的装机结构是长尾的、不重合的,一批设备清单高度相似,大概率出自同一个"生产批次"。你手机里那份清单,在行业里的用法比你想的多。知乎
四、"拒绝就罢工"不是吓你:这些代价是真的
讲到这里必须把反方证据摆上桌,不然就成了又一篇"无脑拒权限"水文。社区里被骂得多的"不给权限就用不了",有几类确实碰在正当链路上:
小红书上有用户求助:国家助学贷款App走到"网上签订"一步跳转失败,反复弹提示,其实需要拉起招商银行App——跨应用跳转依赖可见性,被系统闸门一刀切住。小红书
有用户图省事关了"读取应用列表",结果海外券商Charles Schwab(嘉信理财)反复登录不上——这类金融App用装机清单做风控和设备关联,属于它的合理业务逻辑。小红书
跳广告工具GKD、李跳跳,以及"时光序"的白名单功能,都要靠读应用列表工作;抖音极速版甚至专门发过"不要关闭平台读取应用列表权限"的引导。小红书
小米澎湃OS的官方开发者文档写得具体:默认状态下应用只能查到三类(自己分发的、系统应用、清单内声明的),并要求queries声明的包名数量不超过10个——收紧本身也会带来兼容性问题,知乎上就有开发者问:安卓14上没申请QUERY_ALL_PACKAGES,为什么启动还弹"读取您的应用列表"授权框?系统管的是一条通路,业务要的是那份清单,两边对不上时,就会各自加码。知乎

但注意分辨一个关键偷换:跳转、拉起某个具体App,本来用窄化的queries声明就能实现,不需要全量清单。"我要跳去招行"是正当需求,"我要看你装了哪些App"是另一回事。很多弹框把这两件事捆在一起要,这才是矛盾的根源。
五、普通用户现在能做的,和做不到的
先把预期说诚实:在"queries+MAIN"这条按设计工作的通路面前,弹框拒绝拦不住铁了心的宽声明App,安卓用户做不到100%隐身。能做的,是抬高自己这份清单的成本,并管住真正危险的那几个口子。
按优先级来:
看清弹框来源再点。 vivo等系统会高频弹这个授权(社区里"为什么vivo老跳出读取应用列表提示"是个持续多年的疑问贴)。弹框出现时记住是哪个App:背单词、手电筒、壁纸类要全量清单的,直接拒绝;金融、备份、工具类按其核心功能判断。
每月查三张高权限名单,比应用列表重要得多。 设置里翻"特别应用访问":使用情况访问、无障碍、通知使用权。这三项是"清单+活跃度"的富矿,常年挂着几个你自己都想不起来授权过的App。不需要就关——这一条的收益比纠结弹框大。
用好国产ROM已有的武器。 澎湃OS、OriginOS、ColorOS的设置→应用→权限管理里找"读取应用列表/已安装应用列表"开关,默认收紧;荣耀的"虚拟权限"可以给索要清单的App喂一份空数据,先试用再决定是否给真的。微博
敏感App的安装本身就是信息。 医疗咨询、情趣、宗教类App,装在主力机上就等于向所有拿到清单的App广播。这类需求尽量用隐私空间/分身或网页版完成,别让它出现在桌面图标层——前面说过,有桌面图标就能被MAIN查个干净。
对"不给就闪退"的应用,先查再给。 先搜"{App名} 读取应用列表"看是不是真实业务依赖(比如跳转支付),还是纯粹的画像索求;前者给单次允许,后者宁可换替代品。
至于要不要因此恐慌:不必。装机清单被拿走的直接后果不是盗刷,而是画像与定价——你的还款能力、健康状况、感情状态,会变成别人广告后台里的一组标签。反证也要摆出来:目前没有任何公开证据表明这些绕道拿到的清单被用于盗号一类的高危场景;它是慢性病,不是急症。
接下来值得继续盯三个信号:谷歌会不会把"按设计工作"的说法改口、把intent宽查询纳入政策审查;国内厂商会不会像收紧剪贴板那样,把应用列表默认可见范围再压一档;以及黑产"洗机"已经进化到伪造装机结构之后,风控与隐私的新一轮攻防会往哪走。
你有没有过"这App怎么知道我装了XX"的瞬间?是虚惊一场(老App的规则豁免、侧信道探测),还是实锤的索权弹框?评论区聊聊你是哪个系统、哪个App——这份名单本身,就是我们最缺的数据。