ADB成功打开虚拟机,核心就两步:先让虚拟机里跑起可调试的ADB服务,再用宿主机的adb connect指对IP和端口,本文把这套流程拆成可直接照做的步骤,并解答最常见的报错原因。
为什么你的ADB连不上虚拟机?先搞懂这层原理
ADB(Android Debug Bridge)本来是为真机USB调试设计的,虚拟机没有USB口,或者USB透传不稳定,所以大家普遍改用TCP/IP网络方式连接,你可以把虚拟机当成一台“远程手机”,宿主机通过adb connect命令找到它。
这里有三种常见的实现路径,了解后你就明白自己该选哪种:
- 网络ADB直连:虚拟机内部开启ADB网络监听,宿主机用
adb connect连IP,这是最通用、成功率最高的方式。 - USB透传:需要虚拟机软件(如VirtualBox、VMware)先映射物理USB设备,再走传统
adb usb,容易遇到驱动和权限问题,不推荐新手。 - 集成ADB的模拟器:比如Android Studio自带模拟器、MuMu、雷电,它们自带
adb连接包装,有时不需要手动配置,但你依然需要知道底层命令,因为打开虚拟机里的应用或调试开关时,还是靠ADB指令。
如果目标只是“打开虚拟机里的某个App或系统设置”,别去折腾USB透传,直接走网络ADB,操作路径最短,坑也最少。
如何在虚拟机里使用ADB:从环境配置到成功打开App
下面以一台运行Android 9+的VMware虚拟机为例,步骤同样适用于VirtualBox和各类安卓模拟器。
第一步:在虚拟机内开启调试模式并获取IP地址
打开虚拟机的“设置” → “系统” → “关于平板”或“关于手机”,连续点击“版本号”七次,直到看到“开发者模式已开启”的提示,然后返回“设置” → “开发者选项”:
- 打开 “USB调试” 或 “ADB调试”
- 打开 “网络调试”(如果有此选项);部分系统只有“无线调试”,同样可用
- 允许“仅充电模式下启用ADB”之类的新特性,具体名称因系统而异
中途弹出的“允许USB调试吗?”对话框,务必勾选“一律允许”,否则宿主机发来的指令会被拦下。
接着在虚拟机里点开“设置”→“关于平板”→“状态”查看IP地址,比如168.88.128,也可以直接在虚拟机终端里执行ip addr,看wlan0或eth0下的inet地址。
第二步:用adb connect虚拟机ip地址,建立宿主机到虚拟机的连接
先在宿主机确认ADB工具可用,如果你已安装Android Studio,直接在终端/命令行里输入adb version;否则去Google官方下载“platform-tools”并解压到固定目录。
执行以下命令:
adb kill-server adb connect 192.168.88.128:5555
这里有两个关键细节:
- 端口默认是5555,与真机的ADB监听端口一致,如果虚拟机内改了端口,使用
adb connect ip:端口。 - 如果连接超时或拒绝访问,先检查虚拟机防火墙是不是挡住了5555端口,可在虚拟机终端执行
adb tcpip 5555,强制监听端口。
连接成功的标志是返回connected to 192.168.88.128:5555,再输入adb devices,列表里应显示device状态,而不是offline或unauthorized。
第三步:用ADB直接打开虚拟机里的应用
连接成功后,打开应用只是一条命令的事,先知道目标应用的包名和主Activity,最稳妥的方法是在虚拟机里先点一下那个应用,然后在宿主机执行:
adb shell dumpsys window windows | grep mCurrentFocus
输出里含有类似com.android.settings/.Settings这样的包名,接着用am start命令打开它:
adb shell am start -n com.android.settings/.Settings
如果想打开微信,通常是这样:
adb shell monkey -p com.tencent.mm 1
monkey命令会直接拉起该应用的主界面,不用去查Activity全名,适合快速打开任意应用,想回到桌面,执行:
adb shell input keyevent KEYCODE_HOME
这套流程就是“打开虚拟机”的全部含义不是去启动VMware窗口,而是用ADB控制虚拟机内的安卓系统,执行你想要的操作。
adb打开虚拟机失败?先排查这四个原因
行业共识认为,九成以上的ADB虚拟机连接失败不是命令问题,而是环境配置不干净,据此列出最常见的四类原因。
IP地址没填准确,或虚拟机网络模式不对
虚拟机默认NAT模式下,宿主机不一定能直接访问虚拟机的IP,你自己看到的是内网地址(如192.168.x.x),但宿主机能ping通吗?先在宿主机执行ping 192.168.88.128。
- ping不通:把虚拟机网络模式改为“桥接模式”,让虚拟机获得与宿主机同网段的IP,或者在同一局域网内的另一台机器上安装ADB工具来连接。
- 两个IP混淆:虚拟机显示的内网IP和宿主机看到的IP可能不同,确保执行
adb connect时,用的是宿主机能访问到的那个IP。
端口5555没开,或者ADB服务被占用
虚拟机内若有杀毒软件或防火墙,会拦截5555端口请求,临时关闭虚拟机防火墙后,重试连接。
宿主机这边,如果曾经用adb connect连接过其他设备,可能出现“cannot connect”或“already connected”报错,先执行adb disconnect断开所有连接,再adb kill-server和adb start-server重启服务。
| 报错信息 | 排查方向 | 常用解决命令 |
|---|---|---|
cannot connect to 192.168.88.128:5555 |
端口或网络不通 | adb tcpip 5555,检查防火墙 |
connected but unauthorized |
虚拟机未允许宿主机的RSA密钥 | 拔出重插,弹窗勾选一律允许 |
device offline |
虚拟机的ADB守护进程异常 | adb kill-server,重启虚拟机ADB服务 |
虚拟机的Android系统没有启用ADB网络权限
部分Android x86镜像默认禁用网络ADB,需要在虚拟机内打开终端,以root身份执行:
setprop service.adb.tcp.port 5555 stop adbd start adbd
如果系统提示setprop不允许,说明你没有root权限,换一个带root的镜像(如基于Android-x86的项目)就能解决。
ADB版本与Android系统的协议不兼容
老掉牙的ADB版本(如1.0.32)连接新版Android 13虚拟机,会出现“device unauthorized”循环或protocol fault,从Android开发者官网更新platform-tools,保证adb version在1.0.41以上。
虚拟机ADB连接超时怎么办?用固定IP和端口彻底解决
动态IP每次重启都会变,导致你的ADB脚本跟着失效,更烦人的是,虚拟机休眠后Wi-Fi断开,连接就超时,业内专家指出,给虚拟机配置固定IP或使用NAT端口映射,能解决绝大多数长期使用场景下的掉线问题。
设置虚拟机静态IP
在虚拟机内编辑/etc/network/interfaces或/data/misc/ethernet,把IP地址、网关、DNS写死,重启网络服务后,adb connect的IP就永远不变了。
用VMware/VirtualBox的端口映射
如果必须保持NAT模式,在虚拟机的“网络管理器”里添加一条规则:宿主机的某个空闲端口(比如5555)映射到虚拟机的IP地址的5555端口,然后宿主机只要执行:
adb connect 127.0.0.1:5555
就能绕过子网隔离问题,连接稳定很多。
避免休眠掉线
在虚拟机内设置“屏幕永不休眠”,或用ADB命令保持唤醒:
adb shell svc power stayon true
这样即使虚拟窗口最小化,ADB服务也不会因为系统休眠而停止响应。
Q&A:关于ADB打开虚拟机的几个高频疑问
Q1:adb connect成功了,但adb devices里显示offline,怎么修复?
先检查虚拟机屏幕上是否弹出了“允许USB调试”的授权框,它只会出现一次,如果没看到,重启虚拟机里的ADB守护进程:在虚拟机终端执行stop adbd再start adbd,然后在宿主机执行adb kill-server,重新连接,多数情况下,offline是授权未确认或ADB版本不匹配导致的。
Q2:虚拟机打开USB调试后宿主机依然识别不到,哪里设置漏了?
在宿主机的adb devices之前,先确认虚拟机系统里“网络调试”或“无线调试”也已开启,因为虚拟机没有物理USB端口时,只开USB调试不会触发网络监听,需要手动执行adb tcpip 5555,或在开发者选项里勾选“通过网络连接调试”,部分安卓模拟器(如雷电、MuMu)的“USB调试”和“ADB调试”是两个独立开关,都要打开。
Q3:ADB能通过公网连接远程虚拟机吗?
可以,但不要直接暴露5555端口到公网,极易被扫描,更安全的做法是在远程宿主机上使用SSH隧道,把本地端口转发到虚拟机IP的5555端口,然后执行adb connect 127.0.0.1:本地端口,数据全程走加密SSH通道,虚拟机自身的ADB服务不受影响。
把ADB用到虚拟机上,本质就是把“插USB”这一步替换成“发网络请求”,只要IP、端口、授权三个要素都对齐,打开虚拟机里的任何应用都只是几秒钟的事,下次连接失败时,先按本文的顺序检查网络模式、端口占用和授权弹窗,比盲目重启虚拟机有效得多。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/926364.html


评论列表(5条)
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
@老魂5096:这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于端口的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于端口的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!