You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android客户端虚拟设备正常,真机连接超时问题求助

针对Android 7.1.1真实设备连接超时的排查方案

你遇到的问题我之前帮同事排查过类似案例——虚拟机正常跑但Android 7.x真实设备连不上,报错java.net.ConnectException: Connection timed out,既然已经排查过IP和端口,那可以从Android 7.x特有的规则和真实设备的环境差异入手:

  • 优先检查Android 7.1的明文网络限制
    Android 7.0(API 24)开始默认拦截明文HTTP请求,虚拟机因为调试环境可能自动放宽了限制,但真实设备会严格执行。可以快速验证:

    1. AndroidManifest.xml<application>标签里临时添加android:usesCleartextTraffic="true",如果能正常连接,就说明是明文请求的问题。
    2. 正式解决方案是创建网络安全配置:在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→权限里,确认“网络访问”已经开启。
  • 排除Doze模式的网络限制
    Android 6.0以上的Doze模式会在设备闲置时切断APP网络,哪怕你在调试,如果平板屏幕熄灭一段时间,也可能触发这个机制。可以去设置→电池→电池优化里,把你的APP设为“不优化”,调试时保持屏幕常亮。

  • 再验证一次端口的可访问性
    用PC端的telnet 主机IP 端口命令,或者平板上的端口扫描APP,确认端口真的能被平板访问。有时候主机防火墙会拒绝局域网设备的连接请求,需要在主机防火墙里添加允许该端口的规则。

如果还是不行,可以在客户端里加日志打印DNS解析结果、连接的IP和端口,或者用代码执行ping命令测试平板到主机的连通性,进一步缩小问题范围。

内容的提问来源于stack exchange,提问作者Vadim Babiichuck

火山引擎 最新活动