现象
小米 17 Pro 升级到 HyperOS 4.0 / Android 17 后,Chrome 访问内网地址会直接闪退,例如:
- 打开
http://192.168.10.1/路由器后台时,Chrome 直接退出。 - 访问内网 IP 或内网域名时,Chrome 同样闪退。
- MT 管理器连接 NAS SMB 超时。
- 同一台手机访问公网正常。
- 同一局域网内其他设备访问路由器和 NAS 正常。
- 小米浏览器访问同样的内网地址正常。
当时的设备和系统版本:
| |
这个现象看起来像网络问题,但关键差异是:小米浏览器正常,Chrome 和 MT 管理器异常。说明底层网络大概率是通的,问题更可能出在应用权限层。
解决办法
用 ADB 查看 Chrome、MT 管理器和小米浏览器的本地网络权限:
| |
异常状态类似这样:
| |
Chrome 和 MT 管理器的包级权限是 allow,但 UID 级 AppOps 仍然是 ignore。这会导致系统设置里看起来像是已允许,应用实际访问内网时仍然被拦。
直接把受影响应用的 UID 级本地网络权限改回 allow:
| |
如果使用无线调试,可以先配对手机:
| |
修复后再次打开 Chrome 访问 http://192.168.10.1/,路由器后台可以正常打开;MT 管理器访问 NAS SMB 也恢复正常。
问题原理
Android 17 开始,本地网络保护对 target SDK 37 及以上应用强制执行。应用访问局域网地址、mDNS、SSDP、NsdManager 等本地网络能力时,会受到 ACCESS_LOCAL_NETWORK 影响。
这次问题的核心不是 Chrome 没有权限,而是权限状态分裂:
- 包级 AppOps:
ACCESS_LOCAL_NETWORK = allow - UID 级 AppOps:
ACCESS_LOCAL_NETWORK = ignore
系统更新后,部分 App 的 UID 级 AppOps 状态没有正确迁移。于是就出现了“设置界面看起来允许,但应用实际访问内网失败”的情况。
小米浏览器没有这个 UID 级 ignore 状态,所以同一网络下可以正常访问内网;Chrome 和 MT 管理器被 UID 级 AppOps 拦住,所以分别表现为闪退和 SMB 超时。
Chrome 的闪退不是普通的 DNS 失败或 TCP 超时。崩溃日志里能看到它崩在自己的 NetworkService 线程和 libchrome.so:
| |
也就是说,系统权限异常触发了 Chrome 网络服务侧的崩溃。
注意事项
- 只对确实需要访问内网的 App 执行
ACCESS_LOCAL_NETWORK allow,不要批量放开所有应用。 - 如果其他应用也出现类似问题,把包名替换成对应 App 后重复检查和修复即可。
- 包名可以用
adb shell pm list packages | grep -i <keyword>查询。 - 系统或应用后续更新可能再次改变 AppOps 状态,复发时重新检查 UID 级权限。
参考: