睿诚科技协会

Android ADB网络如何配置与调试?

核心概念:ADB 网络连接的本质

要理解 ADB 的网络功能,首先要明白 ADB 本身是如何工作的,ADB 连接主要有两种方式:

Android ADB网络如何配置与调试?-图1
(图片来源网络,侵删)
  1. USB 连接 (最常用):通过 USB 数据线将手机连接到电脑,ADB 通过 USB 接口进行通信,这是最稳定、最可靠的方式。
  2. Wi-Fi 连接 (无线调试):通过 Wi-Fi 网络将手机和电脑连接起来,这在不方便插拔 USB 线时非常有用。

无论使用哪种连接方式,一旦 ADB 连接成功,你的电脑就获得了一个对 Android 设备的“Shell 访问权限”,所有网络命令,本质上都是在设备的 Linux Shell 中执行的,这就是 ADB 能进行各种网络操作的根本原因。


基础网络命令 (在设备上执行)

这些命令通过 adb shell 进入设备的命令行后执行,用于查看和管理设备自身的网络状态。

查看网络信息

  • 查看所有网络接口的 IP 地址

    adb shell ip addr show
    • 常用缩写
      adb shell ip a
    • 输出解读:你会看到 lo (loopback, 127.0.0.1)、wlan0 (Wi-Fi)、rmnet_usb0 (移动网络) 等接口,以及它们对应的 IP 地址。
  • 查看路由表

    Android ADB网络如何配置与调试?-图2
    (图片来源网络,侵删)
    adb shell ip route show
    • 常用缩写
      adb shell ip r
    • 输出解读:显示数据包应该发往哪个网关。default via 192.168.1.1 dev wlan0 表示默认网关是 168.1.1
  • 查看 DNS 服务器

    adb shell getprop net.dns1
    adb shell getprop net.dns2
    • 说明:Android 的 DNS 配置通常保存在系统属性中。getprop 命令用于读取这些属性。
  • 检查网络连通性

    # 从设备 ping 一个外网地址
    adb shell ping www.google.com
    # 从设备 ping 电脑的 IP 地址 (前提是它们在同一网络下)
    adb shell ping 192.168.1.10

管理网络连接

  • 开启/关闭 Wi-Fi

    # 开启 Wi-Fi
    adb shell svc wifi enable
    # 关闭 Wi-Fi
    adb shell svc wifi disable
    • 说明svc (Service Control) 是一个强大的系统命令,可以控制各种系统服务。svc wifisettings put global wifi_on 更可靠。
  • 开启/关闭移动数据

    Android ADB网络如何配置与调试?-图3
    (图片来源网络,侵删)
    # 开启移动数据
    adb shell svc data enable
    # 关闭移动数据
    adb shell svc data disable
  • 切换飞行模式

    # 开启飞行模式
    adb shell settings put global airplane_mode_on 1
    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
    # 关闭飞行模式
    adb shell settings put global airplane_mode_on 0
    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
    • 说明:只修改 airplane_mode_on 的值是不够的,还需要发送一个广播来通知系统更新状态。

ADB 自身的网络功能 (在电脑上执行)

这部分是 ADB 的“独门绝技”,允许你通过网络直接与设备上的特定服务通信。

端口转发

这是 ADB 最核心的网络功能,允许你将电脑上的一个端口映射到设备上的一个端口。

  • 语法

    adb forward <local> <remote>
    • <local>:你电脑上的一个 TCP 端口号。
    • <remote>:设备上的一个 TCP 端口号或 Unix 域套接字。
  • 常用场景

    • 调试 Web 应用:如果你在设备上运行了一个 Web 服务器,监听 localhost:8080,你可以将电脑的 8090 端口映射过去。
      adb forward tcp:8090 tcp:8080

      然后你就可以在电脑浏览器中访问 http://localhost:8090 来查看设备上的 Web 服务。

    • 连接到应用的调试端口:一些应用(如 Chrome、自定义服务)会暴露调试端口,连接到 Chrome 的远程调试端口:
      adb forward tcp:9222 localabstract:chrome_devtools_remote

      然后访问 http://localhost:9222 就能看到 Chrome 的 DevTools 设备列表。

  • 列出和删除转发规则

    # 列出所有当前的转发规则
    adb forward --list
    # 删除一个特定的转发规则
    adb forward --remove tcp:8090
    # 删除所有转发规则
    adb forward --remove-all

Wi-Fi 连接 (无线 ADB)

这是实现 ADB 无线操作的关键。

  • 前提条件

    1. 手机和电脑连接到同一个 Wi-Fi 网络
    2. 手机上已开启 USB 调试
  • 操作步骤

    1. 通过 USB 连接设备
      adb devices

      确认设备已连接并授权。

    2. 获取设备的 IP 地址
      adb shell ip addr show | grep "wlan0"

      找到类似 inet 192.168.1.100 的 IP 地址。

    3. 配置端口转发
      adb tcpip 5555

      这会断开 USB 连接,并让设备在 5555 端口上监听 TCP 连接。5555 是 ADB 的默认端口。

    4. 通过 Wi-Fi 连接
      adb connect <设备IP地址>:5555

      adb connect 192.168.1.100:5555

    5. 验证连接
      adb devices

      如果看到 <设备IP>:5555 设备,并且状态为 device,则表示连接成功,之后你就可以像使用 USB 连接一样使用 adb shelladb install 等所有命令了。

  • 断开无线连接

    adb disconnect <设备IP地址>:5555

    或者直接 adb disconnect 会断开所有无线连接。


高级应用场景

抓取网络包

在开发或调试中,抓取网络包是分析问题的利器。

  • 使用 tcpdump (需要提前安装)

    1. 在手机上下载 tcpdump for Android (例如从 here)。
    2. tcpdump 推送到设备的 /data/local/tmp/ 目录并赋予可执行权限:
      adb push tcpdump /data/local/tmp/
      adb shell chmod 755 /data/local/tmp/tcpdump
    3. 启动抓包(只抓取 wlan0 接口,并保存到 /sdcard/capture.pcap):
      adb shell "/data/local/tmp/tcpdump -i wlan0 -w /sdcard/capture.pcap"
    4. 在手机上复现你要抓包的操作。
    5. 停止抓包(按 Ctrl+C)。
    6. 将抓取的包文件拉取到电脑上分析:
      adb pull /sdcard/capture.pcap .
    7. 使用 Wireshark 等工具打开 capture.pcap 文件进行分析。
  • 使用 Android Studio 的 Profiler: 这是更简单、更集成的方案,在 Android Studio 中,打开你的项目,点击底部的 Profiler 标签页,选择你的设备和应用,在 Network 标签页中,你可以实时查看应用的 HTTP/HTTPS 请求,包括请求方法、URL、状态码、请求/响应头和耗时,这对于分析 App 的网络行为非常直观。

模拟网络环境 (限制网速、延迟、丢包)

在开发时测试应用在网络不佳情况下的表现非常有用。

  • 使用 tc (Traffic Control)tc 是 Linux 内核中的流量控制工具,很多 Android 设备(尤其是 rooted 设备或 AOSP 设备)都包含它。

    • 限制上行带宽为 1Mbps,延迟 100ms,丢包 1%

      # 假设网络接口是 wlan0
      adb shell "tc qdisc add dev wlan0 root netem rate 1mbit latency 100ms loss 1%"
    • 取消限制

      adb shell "tc qdisc del dev wlan0 root"
    • 注意:此命令需要 root 权限才能执行,并且不是所有设备都支持 tc


故障排查

  • adb: no devices/emulators found

    • 检查 USB 线是否完好,是否连接到正确的 USB 端口。
    • 在手机上检查“关于手机” -> “版本号”,连续点击 7 次“开启开发者选项”。
    • 在“开发者选项”中,确保“USB 调试”已开启。
    • 如果是无线连接,确保手机和电脑在同一 Wi-Fi 下,并且防火墙没有阻止连接。
  • adb: error: failed to get feature set: no devices/emulators found

    这个错误通常表示物理连接存在问题,但设备被部分识别,尝试换一根 USB 线或 USB 端口。

  • 无线连接后 adb: connect failed: unable to connect to <IP>:5555: Connection refused

    • 确保设备 IP 地址正确。
    • 确认设备上 tcpip 5555 命令已经执行成功,可以尝试重新执行一遍 adb tcpip 5555
    • 检查电脑和手机的防火墙设置,可能阻止了 5555 端口的连接。
  • 端口转发不生效

    • 使用 adb forward --list 确认规则是否正确添加。
    • 检查目标应用是否在监听正确的端口。
    • 某些系统或应用可能需要 root 权限才能被访问。
功能类别 核心命令 主要用途
基础网络 adb shell ip a/r, adb shell ping 查看设备自身网络状态、IP、路由、连通性。
网络控制 adb shell svc wifi/data [enable\|disable] 通过代码或脚本开启/关闭 Wi-Fi 和移动数据。
端口转发 adb forward <local> <remote> 将电脑端口映射到设备端口,用于调试本地服务、Web 应用等。
无线连接 adb tcpip 5555, adb connect <ip>:5555 实现 ADB 的无线调试,摆脱 USB 线缆束缚。
网络抓包 adb shell tcpdump, Android Profiler 分析应用的 HTTP 请求和底层网络流量,定位网络问题。
网络模拟 adb shell tc qdisc ... (需 Root) 模拟慢速、高延迟、丢包的网络环境,测试应用健壮性。

掌握这些 ADB 网络功能,将极大地提升你开发和调试 Android 应用的效率,希望这份指南对你有帮助!

分享:
扫描分享到社交APP
上一篇
下一篇