Android 14 对应用访问其他应用数据做了哪些进一步限制?
解读
面试官问“进一步限制”,重点在“14 新增”与“其他应用数据”两点。国内 ROM 虽然会裁剪 GMS,但 AOSP 安全补丁必须合入,否则无法过工信部入网测试与 CTS/VTS 认证。因此回答必须围绕 AOSP 14 正式引入、且国内场景可验证的“跨应用数据访问”收紧策略,避免扯到 GMS 独占特性。同时要把“限制”拆成“可见性”“可读性”“可写性”三个维度,体现系统性思考。
知识点
- 包可见性(Package Visibility)在 14 被强制化:targetSdk ≥ 34 时,默认只能看到自身与系统声明的少量包,query-all-packages 权限不再自动生效。
- 前台服务启动限制:targetSdk ≥ 34 时,若应用处于“缓存”状态,不允许通过 bindService/startService 跨应用启动前台服务,阻断后台应用借服务拉活。
- 隐式 Intent 拦截:系统对隐式 Intent 增加“匹配结果缓存”与“调用者身份二次校验”,防止恶意 App 伪装目标 App 的 exported Activity/Service 截获数据。
- 共享 UID 废除:14 起系统不再为新安装 App 分配共享 UID,已分配的在升级时会被拆分,切断传统“同 UID 即同数据”的旁路。
- 剪切板自动清除:后台应用读取剪切板数据时,系统会在 5 分钟后自动清空,防止后台偷取验证码。
- ContentProvider 默认拒绝:targetSdk ≥ 34 且 exported=false 的 ContentProvider,对非系统、非签名级调用一律拒绝,阻断“URI 穷举”扫描。
- 照片/视频部分访问:READ_MEDIA_IMAGES/VIDEO 只能拿到应用自己创建的媒体,访问他人创建的文件需用户通过系统 picker 单次授权,14 起 picker 返回的 URI 临时权限缩短至 30 分钟。
- 侧载应用限制:国内渠道常见的“apk 纯侧载”场景,14 增加了“受限设置”(Restricted Settings)弹窗,禁止侧载 App 默认开启通知监听与无障碍,降低钓鱼应用跨应用注入风险。
答案
Android 14 在 AOSP 层面针对“跨应用数据访问”新增 8 条硬限制,国内终端全部生效:
- 包可见性强制化:targetSdk ≥ 34 默认只能看到自身与系统白名单,query-all-packages 权限需特殊审批,阻断“枚举安装列表”拿到竞争对手包名与版本。
- 缓存状态禁止启动前台服务:后台应用无法通过 bindService 跨应用拉起前台服务,切断链式唤醒与守护进程。
- 隐式 Intent 二次校验:系统对调用者 UID、签名、声明权限做二次比对,防止钓鱼 Activity 截获账号密码。
- 共享 UID 机制退场:新安装应用不再分配共享 UID,老应用在 OTA 升级时被拆分,彻底堵死“同 UID 读私有目录”漏洞。
- 剪切板 5 分钟自毁:后台应用读取后 5 分钟系统自动清空,验证码类敏感数据生命周期可控。
- ContentProvider 默认隔离:exported=false 的 ContentProvider 对非系统调用直接抛 SecurityException,避免 URI 穷举泄露数据库。
- 照片/视频隔离:READ_MEDIA_* 权限缩小为“仅自己创建”,跨应用访问必须走系统 picker,且 picker 授权 30 分钟后失效。
- 侧载应用受限设置:国内用户通过浏览器下载 apk 安装后,系统弹窗禁止默认开启通知监听与无障碍,降低钓鱼应用跨应用注入与键盘记录风险。
拓展思考
面试官可能追问“如何验证这些限制已生效”。可准备三条实战命令:
- adb shell pm list packages | grep -i <竞品包名>,若返回为空,说明包可见性已生效;
- adb shell am start -a android.intent.action.VIEW -d <URI>,若系统抛出“No Activity found to handle Intent”,验证隐式 Intent 二次校验;
- 安装 targetSdk=34 的测试 App,尝试读取 /sdcard/DCIM 下其他 App 创建的 jpg,若返回 SecurityException(MediaStore 拒绝),证明照片隔离已落地。
把“限制条文 + 验证手段”一起抛出,可瞬间拉开与普通候选人的差距。