TargetSDK 30包可见性限制为何不对com.google.android.gms生效?
问题解答
核心结论
这是Android系统预设的自动可见包白名单机制,既不是系统Bug,也不是未公开特性,属于Android 11及以上版本包可见性规则的既定设计。
为什么com.google.android.gms无需声明即可查询
Android 11引入包可见性限制后,系统会默认将几类包纳入所有应用的可见范围,无需应用主动在清单文件的<queries>节点声明:
- 系统核心框架级服务包
- 设备预置的核心生态服务包
com.google.android.gms是Google Play服务的核心载体,属于GMS生态下的系统级预置核心服务,被系统默认加入了全应用可见白名单,因此你直接调用context.getPackageManager.getApplicationInfo("com.google.android.gms",0)不会触发NameNotFoundException异常。
还有哪些同类默认可见的包
常见的默认可见包包含几类:
- 系统原生核心包:比如
android、com.android.server等系统框架相关包 - 设备厂商预置核心服务包:不同厂商会自定义加入自己的核心服务包,比如三星Knox核心服务包、小米MIUI核心服务包等
- 与当前应用存在交互关联的包:比如给你的应用提供ContentProvider的应用、你曾经启动过Activity的应用、和你的应用使用相同签名的应用,都会自动获得可见权限
验证方法
你可以通过adb命令查看当前应用的可见包列表,确认com.google.android.gms是否默认在列:adb shell dumpsys package queries [你的应用包名]
内容的提问来源于stack exchange,提问作者Nilesh Pawar
相关产品推荐
相关产品推荐

