简介:Android应用开发中,模拟器默认使用独立的虚拟网段,与宿主机IP不同,容易导致模拟器无法访问互联网、无法与开发电脑上的本地服务通信。这份操作文档即为解决此类问题而编写,面向需要配置AVD模拟器网络环境的初、中级开发者。配置流程完整讲解了六个关键步骤:启动模拟器、进入adb shell、读取系统属性确认默认DNS与IP、分别设置新的DNS与同网段IP、再次读取属性验证生效,并配有命令输入及结果截图,清晰直观。除了正常配置流程,文档还专门整理了adb常见报错的原因与处理方法,例如设备未找到和设备离线,这些提示通常需要重启adb进程或确认模拟器正常启动。资源以doc格式提供,压缩包整体仅一个文件、大小约47KB,内容精炼,便于随身携带与查阅。目前已有2148人学习下载,对解决模拟器网络配置疑问、提升联调测试效率具有实际的参考价值。
1. 从连不上服务到 IP 玄学:这篇文档到底解决什么
但凡做过 Android 调试的开发者,十有八九都遇到过这种场景:模拟器里 App 请求本机接口报 connection refused,真机插上 USB 能跑、拔了线走 WiFi 就超时,或者好不容易在设置里填了一串静态 IP,保存后网络反而彻底断了。这些问题的根源,说穿了就是 IP 没设置对——要么是没搞清楚 Android 设备当前用的是什么地址,要么是把真机那套网络理解硬套到 AVD 模拟器上。AVD 模拟器的 IP 机制跟真机差别很大,它默认跑在 10.0.2.x 这个内部网段里,访问宿主机要用专用地址;真机则完全取决于你的 WiFi 环境。这篇笔记就是把这些操作拆开讲清楚:怎么看 IP、怎么配静态 IP、AVD 的特殊规则是什么、改了不生效往哪儿排查。适合做 App 开发调试、需要让设备访问电脑上服务的从业者,按章节操作即可复现。
2. 先看再改:Android 与 AVD 查看 IP 的三种方式
2.1 图形界面看 IP:手机设置与模拟器扩展面板
真机查看 IP 最简单,路径基本固定在「设置 → 网络和互联网/WLAN → 点击当前连接的 WiFi → 展开高级/查看详细信息」,里面能看到 IP 地址、网关、子网掩码和 DNS。不同厂商的定制系统把菜单藏得深浅不一,有的叫「状态信息」,有的叫「IP 地址」,但入口逻辑一致:先找到当前连接的 WiFi,再点进去找详情。小米系的系统还需要额外点开「高级」才能展开完整字段,这一步容易漏。
AVD 模拟器这边,图形入口藏在模拟器边框的「扩展控制」里,点开菜单栏的三个点图标,在「Network」或「Settings」面板中可以看到模拟器当前的 IP 信息。冷启动模拟器时,底部状态栏也会短暂显示网络状态,但一闪而过,不建议依赖它。需要注意,模拟器的图形面板展示的是虚拟网卡信息,它内部使用的 IP 网段由 QEMU 的用户态网络栈分配,正常固定为 10.0.2.15,这个地址和宿主机的局域网 IP 完全是两套体系,看到 10.0.2.x 开头不用慌,那不是配置错误。
2.2 adb shell 命令行看 IP:ifconfig、ip addr 与 busybox
图形界面在开发调试时有点鸡肋,因为设备通常连着 USB 或已经开了无线调试,直接在电脑上执行命令反而最快。先保证 adb 能识别设备,再进 shell 看网卡信息:
# 检查设备连接状态 adb devices # 进入 shell 后用 ip 命令查看所有网卡地址(Android 5.0+ 推荐) adb shell ip addr show # 只看 wlan0 网卡(真机 WiFi 通常是 wlan0) adb shell ip addr show wlan0 # 老设备或精简系统里没有 ip 命令时,退回用 ifconfig adb shell ifconfig第一个adb devices先确认设备在线,如果列表里设备名后面跟的不是device而是offline或unauthorized,先解决连接问题再往下走。ip addr show输出里重点看inet那一行,形如inet 192.168.1.23/24的字段就是当前 IP 和掩码前缀长度,/24对应子网掩码 255.255.255.0。ifconfig在部分精简版系统里可能不存在,如果一个命令报not found,立刻换另一个,不要纠结。
有些 App 开发场景需要拿到设备的公网出口 IP(比如后端要做白名单),这时候命令要换成访问外网服务来探测:
# 在设备 shell 里请求一个 IP 回显接口 adb shell curl ifconfig.me这个命令依赖设备能联网且装了 curl,模拟器镜像一般自带,部分真机 ROM 会精简掉。拿回来的地址是运营商分配的出口 IP,跟局域网内网 IP 不是一回事,做白名单时别填错了,这是个容易忽略的细节。
2.3 用 IP 判断网络状态:网段、网关和 DNS 的判别
拿到 IP 之后,更重要的是会读它。三个关键字段各管一摊:IP 地址标识设备在局域网里的身份,网关是设备出网必须经过的路由器地址,DNS 负责把域名解析成 IP。开发调试时最常用的判断是——设备能不能跟电脑通信,看两个 IP 是否在同一个网段。电脑执行ipconfig(Windows)或ifconfig(macOS/Linux)拿到自己的局域网 IP,如果网段前缀和设备的一致(比如都是 192.168.1.x),那走局域网直连就行;如果网段不同(设备在 192.168.1.x,电脑在 10.0.0.x),就需要考虑端口转发或者把设备切到同一网段。
DNS 在模拟器场景里是个重点坑。模拟器默认 DNS 指向 10.0.2.3,它会把 DNS 请求转发给宿主机当前使用的 DNS 服务器。如果你发现模拟器能 ping 通 IP 但解析不了域名,大概率是宿主机的 DNS 本身有问题,或者模拟器的 DNS 转发链路被防火墙拦了。验证方法很简单:
# 在模拟器 shell 里分别测试 IP 连通性和域名解析 adb shell ping -c 3 223.5.5.5 adb shell ping -c 3 www.baidu.com第一条通、第二条不通,问题就锁定在 DNS 链路上,别去折腾 IP 配置。掌握了这套判别方法,后面设置静态 IP 时才算真正知道自己在填什么。
3. 真机端设置 IP:静态 IP 配置的完整流程
3.1 为什么需要静态 IP:开发调试场景的三个理由
开发阶段给真机配置静态 IP,通常是为了解决三类问题。第一类是设备需要固定访问某个局域网服务——比如电脑上跑着后端接口,手机每次开机 DHCP 分配的 IP 都会变,后端如果做了来源 IP 校验,换一次 IP 就要改一次白名单,静态 IP 一劳永逸。第二类是 WiFi 环境的 DHCP 服务不稳定,办公室网络设备接入量一大,DHCP 分配就间歇性失灵,手机显示已连接但拿不到有效 IP,手动指定能绕过这个故障。第三类是端口映射需求——路由器上配了 DMZ 主机或端口转发规则,这些规则通常绑定固定 IP,DHCP 分配的动态地址会导致规则失效。
静态 IP 不是随便填的。最常见的翻车操作是把 IP 乱写一通——填了个 192.168.5.88,但路由器网段是 192.168.1.x,配置保存后立刻断网。配置静态 IP 的本质是手动向网络声明「我就用这个地址」,这个地址必须在当前局域网的有效分配范围内,而且不能和其他设备冲突。动手前先在电脑上执行arp -a看一眼局域网里哪些 IP 已被占用,选一个空闲的、在路由器 DHCP 分配池范围内的地址。
3.2 在设置里配置静态 IP 的步骤与参数
Android 系统的静态 IP 配置入口藏在 WiFi 详情里,标准路径是:设置 → WLAN → 长按当前连接的 WiFi → 修改网络 → 高级选项 → IP 设置改成「静态」。不同 ROM 的措辞略有差别,但核心逻辑一样:先把 IP 获取模式从 DHCP 切到静态,然后填四个字段——IP 地址、网关、子网掩码、DNS。
具体参数怎么填,拿一个常见的家庭网络举例:路由器管理地址是 192.168.1.1,DHCP 分配池是 192.168.1.100 到 192.168.1.199。那么:
| 字段 | 填写值 | 说明 |
|---|---|---|
| IP 地址 | 192.168.1.88 | 必须在 DHCP 池范围内但未被占用的地址 |
| 网关 | 192.168.1.1 | 路由器的局域网地址,填错直接无法出网 |
| 子网掩码 | 255.255.255.0 | 与前缀 /24 等价,设备与电脑同网段判断依据 |
| DNS1 | 192.168.1.1 | 用路由器做 DNS 转发,兼容性最好 |
| DNS2 | 223.5.5.5 | 备用的公共 DNS,防止路由器 DNS 故障 |
保存之后不要急着关设置页,先退回桌面等几秒,让系统重新关联 WiFi。这里有个规律:静态 IP 配置在 WiFi 重连后才会完全生效,如果保存后网络图标显示已连接但没有数据传输,先开关一次 WiFi 强制触发重连。另外,部分国产 ROM 在「高级选项」里还藏着「IP 设置」和「代理设置」两个入口,IP 设置务必选「静态」而不是「DHCP」,代理保持「无」,很多开发者在这里误把代理设成了10.0.2.2:8080(这是模拟器访问宿主机的写法),导致真机所有请求都走了个不存在的代理,血泪教训。
3.3 通过命令行临时设置 IP:root 与调试环境下的替代方案
系统设置里的静态 IP 配置是持久化的,重启设备后依然保留,但这套入口在两种场景下不够用:一是设备是测试机、系统被精简过,设置界面里没有「修改网络」的选项;二是需要频繁切换不同网段的 IP,每次都去设置里点十几次太浪费时间。这两种情况可以用命令行临时设置,前提是设备有 root 权限,或者使用adb shell配合su命令以管理员身份执行:
# 连接设备并获取 root 权限 adb shell su -c "ifconfig wlan0 192.168.1.88 netmask 255.255.255.0" adb shell su -c "ip route add default via 192.168.1.1 dev wlan0" # 设置系统 DNS adb shell su -c "setprop net.dns1 192.168.1.1" adb shell su -c "setprop net.dns2 223.5.5.5"第一条命令给 wlan0 网卡绑定 IP 和子网掩码,第二条命令添加默认路由,也就是网关。这里有个关键问题:ifconfig设置 IP 后,原来的 DHCP 租约和路由表并不会自动更新,如果设备是自动获取模式,系统可能在后台检测到 IP 冲突后自动释放并重新申请,导致静态 IP 失效。更稳的做法是先切断 WiFi 的 DHCP 续约机制,但这个在命令行里不好控制,所以命令行方式只建议用在临时调试场景,持久化配置还是走设置界面。
setprop net.dns1设置 DNS 有一个适用边界:部分 Android 版本里net.dns1是只读属性,命令行写入会报权限错误,这种情况需要改用ndc resolver命令或直接修改/etc/resolv.conf(要求 root 且关闭了 SELinux 强制模式)。实操中我会先执行一遍getprop net.dns1看看当前值能不能改,能改就改,不能改就确认 WiFi 详情页里显示的 DNS 是否已经是新值——很多系统会把命令行设置的结果直接继承到图形界面显示里。
3.4 配置完必须验证的四件事
静态 IP 配好后,别直接打开 App 就以为大功告成,按顺序做四步验证:
# 第一步:确认 IP 真的生效 adb shell ip addr show wlan0 | grep inet # 第二步:验证网关可达 adb shell ping -c 3 192.168.1.1 # 第三步:验证外网连通(走 DNS 解析) adb shell ping -c 3 www.baidu.com # 第四步:验证电脑到设备的双向通道(电脑上执行) ping 192.168.1.88这四步分别卡住了四个环节:第一步检查 IP 是否绑定成功,防止配置保存了但系统未应用;第二步确认网关通不通,网关不通说明子网掩码或网关填错;第三步验证 DNS 和出网链路,域名解析失败先换 DNS 再排查;第四步验证电脑这个客户端能不能访问到设备。四步全通,静态 IP 配置才算真正落地。实际调试中,第四步最容易忽略——设备能连外网不代表电脑能直连设备,如果 App 需要连接电脑上的服务,电脑到设备方向的连通性才是决定性的。
4. AVD 模拟器 IP 机制:别拿真机的思路去套
4.1 10.0.2.x 网段的先天设定
AVD 模拟器的网络架构和真机完全是两回事。真机连 WiFi 拿的是路由器分配的局域网地址,模拟器则是在宿主机内部虚拟了一个用户态网络栈,所有网络流量都通过 QEMU 的虚拟网卡转发。这个内部网络固定使用 10.0.2.x 这个保留网段,模拟器自己拿到的 IP 永远是 10.0.2.15,网关是 10.0.2.1,DNS 是 10.0.2.3。这个网段跟宿主机所在的物理局域网没有任何关系,模拟器在 10.0.2.15 上监听的端口,宿主机和局域网其他设备都访问不到。
理解这个机制,你就能解释很多奇怪现象:模拟器里ping 192.168.1.1(宿主机所在局域网的路由器地址)通常是通的,因为用户态网络栈会把这些包转发给宿主机,再由宿主机路由出去;但局域网里的其他设备反向访问模拟器的服务,连 IP 都找不到。反向不通是网络栈的转发边界决定的,不是 IP 配置错误。真机那套「看 WiFi 详情页拿 IP」的思路在模拟器上完全不适用,模拟器的 IP 是写死的,你不需要改它,也改不动它。
4.2 模拟器访问宿主机:10.0.2.2 的使用要点
模拟器访问宿主机上跑的服务,最核心的一个地址是 10.0.2.2——它映射的是宿主机的回环地址(127.0.0.1)。也就是说,模拟器里访问http://10.0.2.2:8080,等价于宿主机上访问http://127.0.0.1:8080。这个机制让本地调试变得非常方便:电脑上启动一个 Spring Boot 服务监听 8080 端口,模拟器里直接请求 10.0.2.2:8080 就能打通。
但这里有个容易翻车的细节:10.0.2.2 映射的是宿主机的 loopback,不是局域网 IP。如果宿主机上的服务绑定了特定的局域网 IP(比如0.0.0.0之外的指定地址),或者防火墙阻止了 loopback 的入站请求,模拟器访问 10.0.2.2 就会失败。常见的正确姿势是让服务监听127.0.0.1:8080或0.0.0.0:8080,不要绑定到具体网卡的局域网 IP。还有一点要注意:10.0.2.2 只在模拟器内部有效,真机不能用这个地址——很多开发者 App 里把接口地址写死成 10.0.2.2,装到真机上就抓瞎,这个问题在章节 5 里会详细展开。
4.3 给 AVD 自定义网络与 DNS:冷启动参数详解
模拟器的网络参数有几个可以通过冷启动命令行覆盖,最常用的是-dns-server和-http-proxy。启动模拟器时执行:
# 启动 AVD 并指定自定义 DNS 服务器 emulator -avd 你的AVD名称 -dns-server 223.5.5.5,192.168.1.1 # 通过代理访问外网(公司内网调试时用) emulator -avd 你的AVD名称 -http-proxy http://192.168.1.100:8888-dns-server后面可以跟多个 DNS 地址,用英文逗号分隔,这些地址是给模拟器内部 DNS 解析用的,最终在模拟器里看到的 DNS 服务器仍是 10.0.2.3,但转发目标已经被替换成你指定的地址。-http-proxy适用于模拟器需要走代理才能访问外部服务的场景,代理地址必须是宿主机网络能访问到的内网代理服务器。
除此之外还有-port参数,它指定模拟器控制台的端口号。默认情况下第一个模拟器是 5554,第二个是 5556,依次递增。命令行指定端口可以让多个模拟器的 adb 连接、控制台操作互不干扰,实际开发中一台电脑开多个模拟器跑兼容性测试时,这个参数的价值就体现出来了。
# 指定端口启动模拟器 emulator -avd 你的AVD名称 -port 55584.4 模拟器之间的互通与 adb 连接
两个 AVD 模拟器之间能不能直接通信,取决于它们是否共享同一个虚拟网络。默认情况下,每个模拟器都跑在独立的 QEMU 用户态网络栈里,它们各自的 10.0.2.15 指的是自己,两个模拟器之间无法用 10.0.2.x 网段直接互通。如果需要模拟器之间互访,常见做法是让其中一个模拟器的服务通过 adb 反向端口映射暴露出来,或者用两个模拟器分别访问宿主机的不同端口,再由宿主机做转发。
adb 连接模拟器走的是宿主机上的 TCP 端口,默认 5555 或 5554。命令行里执行:
# 查看当前连接的模拟器 adb devices -l # 连接指定端口的模拟器 adb connect 127.0.0.1:5558adb connect后面跟的地址是宿主机视角的地址,127.0.0.1:5558 指向本机的模拟器控制端口。如果你在别的机器上想 adb 连接这台电脑上的模拟器,需要把 127.0.0.1 换成这台电脑的局域网 IP,并且确保防火墙放行了对应端口。这里有一个和标题核心诉求强相关的地方:很多人误以为连接远程模拟器也要在模拟器里设置 IP,其实完全不必要——模拟器内部的 10.0.2.15 只在它自己内部有意义,外部访问统一走宿主机 IP 加端口。
5. 避坑指南:改了 IP 不生效、连不上服务的五个典型排查
5.1 现象一:静态 IP 设置后无法上网
现象描述:在 WiFi 设置里填了静态 IP,保存后网络显示已连接,但浏览器打不开网页,ping 外网 IP 也不通。
原因分析:三个字段里必有一个填错。最常见的是网关填错——有人把网关填成了 DNS 服务器的地址,或者把子网掩码从 255.255.255.0 改成 255.255.255.255,导致设备认为所有目标都在同一网段,所有出网请求都直接发广播,路由器自然不会转发。其次是 IP 地址填在了 DHCP 分配池之外,或者和另一台设备冲突,路由器直接丢弃了它的包。
解决路径:重新进入静态 IP 配置页,逐字段核对。网关必须是路由器自己的局域网地址,不是电脑的 IP;子网掩码要和当前 WiFi 的 DHCP 分配一致,拿不准就统一填 255.255.255.0;IP 地址确认在分配池范围内且arp -a里查不到占用记录。改完开关一次 WiFi,再执行ping 网关,通了再测外网。
5.2 现象二:模拟器 ping 不通宿主机
现象描述:模拟器里执行ping 10.0.2.2失败,或者 App 请求http://10.0.2.2:8080超时。
原因分析:宿主机防火墙拦截是最常见的原因。Windows 的防火墙默认禁止来自虚拟网卡的入站连接,macOS 的防火墙在开启状态下也会拦截 QEMU 网桥的流量。其次是宿主机上的服务只监听了特定网卡的 IP,没监听127.0.0.1或0.0.0.0。
解决路径:在宿主机防火墙里放行模拟器对应的虚拟网卡,或者在服务端把监听地址改成0.0.0.0。验证方法:宿主机上先访问http://127.0.0.1:8080确认服务正常,再用telnet 127.0.0.1 8080从本机测端口通不通。然后从模拟器里执行telnet 10.0.2.2 8080,看是否报 connection refused。如果宿主机能通、模拟器不通,集中在防火墙和监听地址上排查。
5.3 现象三:adb connect 报 cannot connect
现象描述:执行adb connect 192.168.1.100:5555返回cannot connect to 192.168.1.100:5555: 由于目标计算机积极拒绝,无法连接。
原因分析:两个原因占比最高——手机端没有开启无线调试功能;或者手机和电脑不在同一网段,中间隔了路由器隔离策略。Android 10 及以上的无线调试开关藏在开发者选项里,叫「无线调试」,开启后还需要用配对码配对一次,步骤比老版本繁琐不少。另外某些手机品牌默认开启了「WLAN 隔离」,同一 WiFi 下的设备之间互相不可见,adb 自然连不上。
解决路径:先确认网段——手机和电脑分别执行ip addr和ipconfig,看是否同为 192.168.1.x。再确认手机开发者选项里「USB 调试」和「无线调试」都已开启(Android 11 以上需要配对新设备,在无线调试页面点「使用配对码配对设备」,输入电脑端adb pair后显示的配对码)。老版本 Android 直接用adb tcpip 5555切换端口监听模式,然后再 connect。层层排除后才能定位到是手机端没开启服务,还是网络隔离问题。
5.4 现象四:手机能连 WiFi 但 App 收不到服务器响应
现象描述:真机上 App 配置了电脑的局域网 IP,请求能发出去但一直转圈,服务端日志里没有收到任何请求。
原因分析:服务器端服务监听的地址可能绑定了某个具体 IP,或者电脑的防火墙阻止了局域网设备的入站访问。还有一个容易忽略的点:App 里配的电脑 IP 是电脑的当前 IP,但电脑如果同时连着有线网和无线网,操作系统会把不同网络出口的 IP 混在一起,App 访问的那个 IP 可能根本不属于当前工作的网卡。
解决路径:在电脑上执行ipconfig找到与手机同一网段的那块网卡 IP,如果匹配到了多个网卡,优先用有线网卡对应的 IP。确认服务监听地址为0.0.0.0,防火墙放行对应端口(Windows 上执行netsh advfirewall firewall add rule name=debug dir=in action=allow protocol=TCP localport=8080)。最后从手机浏览器直接访问http://电脑IP:8080,浏览器能开就说明链路是通的,问题在 App 本身;打不开就继续查防火墙和监听地址。
5.5 现象五:改了 IP 重启后回到自动获取
现象描述:静态 IP 配置保存后当时生效,但手机重启或 WiFi 断开重连后,IP 又变回 DHCP 分配的动态地址。
原因分析:部分国产 ROM 对「静态 IP」配置做了临时化处理——系统在 WiFi 断开重连时,重新触发了 DHCP 请求,覆盖了手动配置。这个行为和 ROM 的 WLAN 管理策略有关,不是用户操作失误。
解决路径:优先用系统自带的路由器管理 App 或路由器后台,在 DHCP 服务器里给手机的 MAC 地址绑定一个固定 IP 分配。这样做的好处是:手机端完全不用配静态 IP,路由器每次分配同一地址给这个设备,效果等同静态 IP,但省去了手机端配置被重置的烦恼。这种方法在开发机上同样适用——把电脑的 MAC 在路由器里绑一个固定 IP,防止电脑 IP 漂移导致 App 里的接口地址失效。如果设备必须在无路由器环境下自组网(比如通过手机热点直连),再退回到手机端静态 IP 配置,同时更新系统的网络设置文件以持久化保存配置,但普通设备没有 root 权限时这条路走不通,只能用「路由器绑定 MAC」这个根治方案。
6. 进阶技巧:adb reverse 让真机免 IP 访问电脑服务
静态 IP 和 10.0.2.2 都解决了「设备到电脑」的连通问题,但它们有一个共同的缺陷:真机必须和电脑在同一网段,模拟器必须接受固定网段限制。如果有一种方式能让设备通过localhost直接访问电脑上的服务,IP 设置这一步就可以彻底省了——adb reverse就是干这个的。
# 真机或模拟器通过 USB 连接后,将设备的 localhost:8080 转发到电脑的 127.0.0.1:8080 adb reverse tcp:8080 tcp:8080执行完后,在设备上访问http://localhost:8080等价于访问电脑的 8080 端口。它的原理是在 adb 的传输通道上建立一条反向隧道:设备发出的 localhost:8080 请求经过 USB 或无线 adb 连接转发到宿主机,宿主机再请求 127.0.0.1:8080。这个方案对真机和模拟器都有效,而且不依赖 WiFi 网段、不用改防火墙、不用配静态 IP,是本地联调最顺手的一招。
这个命令在两种场景特别有用。第一种是电脑上的服务只监听了 127.0.0.1,不方便改监听地址;第二种是设备走的是蜂窝网络或不在同一个 WiFi 下,局域网 IP 根本不可达。执行后先用adb reverse --list查看已建立的转发规则,确认记录在册,再在设备的浏览器里访问一次测试链路。需要注意adb reverse的失效条件:拔掉 USB 线、重启 adb 服务、设备端切换网络后,转发规则都会被清除,需要重新执行。所以在写自动化脚本时,我会把adb reverse放在每次连接设备后的初始化步骤里,而不是手动执行一次就以为万事大吉。
还有一个组合用法:多个设备连接同一台电脑时,adb reverse按设备维度独立建隧道,每个设备转发到电脑的不同端口,互不干扰。在电脑上分别启动 8081、8082、8083 三个服务实例,再对每个设备执行不同的 reverse 映射,一套多设备差异化调试就搭出来了——这个操作本质上也是在规避 IP 分配问题,因为每台设备的 localhost 都是自己内部地址,不存在跨设备冲突。
以我对 Android 调试的理解,IP 设置这个问题最大的障碍不是操作难,而是概念混淆——真机的局域网 IP、模拟器的 10.0.2.x、adb 隧道的 localhost,三套体系各有各的使用边界。之前我在一个项目里为了省事,给所有测试机都配了静态 IP,结果换了个办公室网段全部失效,排查了半天才意识到是网关没跟着换。那次之后我养成了个习惯:凡是设备到电脑的通信,优先用adb reverse,不行再考虑静态 IP,模拟器场景才用 10.0.2.2。调试链路能少一层依赖就少一层,IP 这种越依赖越容易出问题的环节,能绕开就不硬碰。希望这些操作思路和排查路径能帮到你,下次再碰到设备连不上服务,至少知道该先看哪一个网段、跑哪一条命令。
本文还有配套的精品资源,点击获取