Android客户端虚拟设备正常,真机连接超时问题求助
你遇到的问题我之前帮同事排查过类似案例——虚拟机正常跑但Android 7.x真实设备连不上,报错java.net.ConnectException: Connection timed out,既然已经排查过IP和端口,那可以从Android 7.x特有的规则和真实设备的环境差异入手:
优先检查Android 7.1的明文网络限制
Android 7.0(API 24)开始默认拦截明文HTTP请求,虚拟机因为调试环境可能自动放宽了限制,但真实设备会严格执行。可以快速验证:- 在
AndroidManifest.xml的<application>标签里临时添加android:usesCleartextTraffic="true",如果能正常连接,就说明是明文请求的问题。 - 正式解决方案是创建网络安全配置:在
res/xml下新建network_security_config.xml,内容如下:
再在<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>AndroidManifest.xml的<application>里绑定配置:android:networkSecurityConfig="@xml/network_security_config"
- 在
确认服务的绑定地址不是
127.0.0.1
很多人调试时会把服务绑在127.0.0.1,这只能让共享主机网络栈的虚拟机访问到,但真实设备需要通过局域网IP连接。你得把服务绑定到0.0.0.0或者主机的局域网IP(比如192.168.xx.xx),同时客户端代码里也要用这个局域网IP而非127.0.0.1。排查真实设备的网络环境
联想TB-X304F这类定制系统可能有特殊限制:- 先确认平板和服务主机在同一个WiFi局域网,用平板浏览器直接访问
http://主机IP:端口,如果浏览器也打不开,那就是网络或服务端的问题,和客户端代码无关。 - 检查平板是否开了代理:进入系统设置→WLAN→已连接的网络→代理设置,改成“无”,代理很容易拦截局域网请求。
- 看看平板的厂商安全软件有没有拦截APP网络权限,去设置→应用→你的APP→权限里,确认“网络访问”已经开启。
- 先确认平板和服务主机在同一个WiFi局域网,用平板浏览器直接访问
排除Doze模式的网络限制
Android 6.0以上的Doze模式会在设备闲置时切断APP网络,哪怕你在调试,如果平板屏幕熄灭一段时间,也可能触发这个机制。可以去设置→电池→电池优化里,把你的APP设为“不优化”,调试时保持屏幕常亮。再验证一次端口的可访问性
用PC端的telnet 主机IP 端口命令,或者平板上的端口扫描APP,确认端口真的能被平板访问。有时候主机防火墙会拒绝局域网设备的连接请求,需要在主机防火墙里添加允许该端口的规则。
如果还是不行,可以在客户端里加日志打印DNS解析结果、连接的IP和端口,或者用代码执行ping命令测试平板到主机的连通性,进一步缩小问题范围。
内容的提问来源于stack exchange,提问作者Vadim Babiichuck




