1. 为什么车载测试离不开ADB无线连接做车载测试的人都有一个共识车机不像手机你没法随时把USB线插上去。车机通常固定在中控台里USB口要么藏在手套箱深处要么被饰板挡得严严实实有的车型甚至根本没有暴露在外的数据口。更要命的是很多车机在整车状态下USB调试默认关闭你想用有线连得先拆中控、找调试口、再想办法把线引出来——这一套操作下来半小时就没了。ADB无线连接解决的正是这个痛点。它让测试工程师坐在后排、站在车外、甚至远程通过一台中转设备就能对车机执行shell命令、抓取logcat日志、截图录屏、安装卸载应用、模拟按键输入。对于车载测试来说这不是“锦上添花”而是“基本生存技能”。我做过好几个量产项目的车机测试从航盛车机到各种基于Android定制的车机系统无线ADB的稳定性直接决定了测试效率。有线连接在整车路测阶段几乎不可用——车辆在跑你在副驾抱着笔记本线一扯就断。无线连接让你可以把笔记本放在腿上甚至用平板操作自由度完全不一样。这篇文章面向的是刚入行车载测试的新人以及想从手机测试转车机测试的同行。我会把ADB无线连接的完整流程拆开讲清楚包括为什么要这样做、每一步背后的原理是什么、以及那些文档里不会写的坑。5分钟搞定是目标但前提是你得知道哪里容易翻车。注意本文所有操作均基于Android调试桥ADB的官方功能适用于合法的车载测试场景。请确保你对测试车辆和车机系统拥有合法授权。2. 无线连接前的环境准备与前置条件2.1 车机端必须打开的开关无线ADB的前提是有线ADB至少成功连接过一次。原因很简单无线连接需要先通过USB线执行adb tcpip命令把车机的ADB守护进程从USB模式切换到TCP/IP模式。这个命令只需要执行一次之后就可以拔掉线通过WiFi连接。车机端需要确认的几件事开发者选项已开启进入车机设置找到“关于”或“系统信息”连续点击版本号7次部分车机是5次或10次看厂商定制。如果找不到版本号入口试试在拨号盘输入*#*#8888#*#*之类的工程模式代码不同车机不一样。USB调试已打开在开发者选项里找到“USB调试”并勾选。部分车机还有“仅充电模式下允许ADB调试”的选项也要打开。网络与电脑在同一网段车机连的WiFi或热点必须和你的电脑在同一局域网。车机通常连的是车载WiFi或手机热点你的电脑也要连同一个。这里有个容易忽略的点有些车机的WiFi模块和ADB网络栈是分开的。车机连上了WiFi但ADB的TCP端口可能绑定在以太网接口上。这种情况在部分航盛车机和老款创维车机上出现过。解决办法是先用adb shell ifconfig或adb shell ip addr看一下车机有哪些网络接口确认哪个接口有IP地址。2.2 电脑端ADB环境的正确配置Windows上最常见的坑是ADB版本太老。车机系统通常是Android 9到Android 13之间的定制版本老版本的ADB比如1.0.31可能无法识别新设备。建议直接下载Google官方的Platform Tools解压后把路径加到系统环境变量里。验证ADB是否可用adb version如果提示“adb不是内部或外部命令”说明环境变量没配好。Windows 10有个坑即使你把路径加到了Path里如果用的是PowerShell而不是CMD有时候需要重启终端才能生效。我遇到过好几次配完环境变量后CMD里能用PowerShell里死活找不到重启电脑就好了。另一个常见问题是端口占用。ADB默认使用5037端口如果这个端口被其他程序占用比如某些手机助手、模拟器ADB会启动失败。检查方法netstat -ano | findstr 5037如果有其他进程占用要么关掉那个程序要么设置ANDROID_ADB_SERVER_PORT环境变量换一个端口。2.3 车机USB调试授权的处理第一次用USB线连接车机和电脑时车机屏幕上会弹出一个“允许USB调试吗”的对话框。必须点“允许”并且建议勾选“始终允许”。如果没弹出来或者不小心点了拒绝电脑上执行adb devices会看到设备状态是unauthorized。adb unauthorized的解决办法车机上进入开发者选项找到“撤销USB调试授权”点一下。拔掉USB线重新插上。车机屏幕上应该会重新弹出授权对话框。如果还是不弹检查车机上是不是有“USB配置”选项把它从“仅充电”改成“MTP”或“PTP”。部分车机在“仅充电”模式下不会触发授权弹窗。提示有些车机的授权弹窗被系统UI遮挡了看起来像没弹。试着按一下车机的返回键或者Home键看看弹窗是不是藏在后面。3. 从有线到无线的完整切换流程3.1 第一步USB线连接并确认设备用一根质量靠谱的USB数据线连接车机和电脑。注意必须是数据线不是纯充电线。很多车机附带的线只能充电没有数据引脚插上去电脑根本认不到设备。连接后执行adb devices正常输出应该是List of devices attached 0123456789ABCDEF device如果显示unauthorized回到2.3节处理授权。如果列表是空的说明电脑根本没认到车机。这时候检查车机USB调试是否真的打开了USB线是否支持数据传输Windows设备管理器里有没有出现带感叹号的未知设备如果设备管理器里有未知设备可能需要安装车机厂商的USB驱动。不同车机用的芯片方案不一样有的用高通有的用联发科有的用瑞芯微驱动也各不相同。航盛车机通常用高通方案需要安装高通的QDLoader驱动。3.2 第二步切换ADB到TCP/IP模式设备确认连接后执行adb tcpip 5555这个命令的作用是让车机的ADB守护进程在5555端口上监听TCP连接。5555是ADB无线调试的默认端口也可以换成其他端口比如adb tcpip 6666但没必要除非5555被占用了。执行成功后输出通常是restarting in TCP mode port: 5555这时候USB连接会断开车机上的ADB切换到了网络模式。你可以拔掉USB线了。这里有个细节adb tcpip命令执行后车机的ADB守护进程会重启。如果你的车机正在跑一些依赖ADB的自动化测试脚本这个重启会导致脚本中断。所以建议在测试开始前就做好无线连接不要中途切换。3.3 第三步获取车机IP并建立无线连接拔掉USB线后需要知道车机的IP地址。有两种方法方法一在车机设置里查看WiFi详情找到IP地址。通常在“设置 网络与互联网 WiFi 当前连接的网络”里能看到。方法二如果车机还能通过其他方式访问比如串口执行adb shell ip addr show wlan0查看。拿到IP后在电脑上执行adb connect 192.168.1.100:5555把IP换成你车机的实际IP。连接成功的输出是connected to 192.168.1.100:5555再执行adb devices确认List of devices attached 192.168.1.100:5555 device看到device状态就说明无线连接成功了。整个过程熟练的话从插线到拔线不超过2分钟。3.4 第四步断开与重连的日常操作无线连接建立后日常使用只需要adb connect和adb disconnect两个命令。但有几个实际问题车机重启后无线ADB会失效。因为adb tcpip的设置不是永久性的车机重启后ADB守护进程会回到USB模式。解决办法是重新插USB线执行一次adb tcpip 5555。如果车机支持root可以写一个开机脚本自动执行但量产车机通常没有root权限。IP地址变化。车机连的WiFi如果是DHCP分配IP每次重启可能拿到不同的IP。建议在路由器或热点上给车机MAC地址绑定固定IP。如果做不到每次连接前先确认IP。多设备冲突。如果你同时连接了多台车机adb devices会列出多个设备。这时候执行ADB命令需要指定目标设备adb -s 192.168.1.100:5555 shell4. 车载测试中ADB无线连接的典型应用场景4.1 日志抓取与问题复现车载测试最常用的功能就是抓logcat。车机在路测中出现问题你不可能把笔记本架在中控台上连着线跑。无线ADB让你可以坐在副驾或后排持续抓取日志。adb logcat -v threadtime logcat_20250101.txt这个命令会把日志按线程时间格式输出到文件。-v threadtime是我最推荐的格式包含日期、时间、PID、TID、优先级和标签排查问题时信息最全。如果只想抓特定标签的日志adb logcat -s TAG_NAME:V车机测试中常见的标签包括ActivityManager、WindowManager、AudioFlinger、CameraService等。抓音频问题时重点关注AudioFlinger抓界面卡顿看Choreographer和WindowManager。提示长时间抓logcat时建议加上-G 16M参数扩大日志缓冲区避免日志被冲掉。命令是adb logcat -G 16M。4.2 截图与录屏的实操细节车机界面问题的记录离不开截图和录屏。无线ADB下截图adb exec-out screencap -p screenshot.png注意这里用的是exec-out而不是shell。如果用adb shell screencap -p screenshot.png在Windows上会因为换行符转换导致图片损坏。exec-out直接输出二进制流不会经过shell的文本处理图片是完整的。录屏adb shell screenrecord /sdcard/video.mp4默认录制180秒按CtrlC停止。然后拉取到电脑adb pull /sdcard/video.mp4车机录屏有个坑部分车机的硬件编码器不支持screenrecord的默认参数会报错或者录出来是黑屏。这时候试试降低分辨率adb shell screenrecord --size 1280x720 --bit-rate 4000000 /sdcard/video.mp44.3 应用安装卸载与权限操作车机测试经常需要安装测试版应用或者卸载预装应用。无线ADB下adb install -r app-debug.apk-r表示覆盖安装保留数据。如果是降级安装需要加-dadb install -r -d app-debug.apk卸载应用adb uninstall com.example.app但车机上很多预装应用无法直接卸载需要先获取root权限或者用pm命令禁用adb shell pm disable-user com.example.preinstalled这个命令在部分车机上会提示权限不足。如果车机是userdebug版本可以先执行adb root提权。量产车机通常是user版本adb root会失败。4.4 UI自动化与模拟输入车机UI测试中uiautomator dump可以导出当前界面的控件树adb shell uiautomator dump /sdcard/ui.xml adb pull /sdcard/ui.xml导出的XML文件包含了屏幕上所有控件的位置、文本、资源ID等信息。写自动化脚本时这些信息用来定位元素。模拟点击adb shell input tap 500 800模拟滑动adb shell input swipe 500 800 500 200 300最后两个参数是起始坐标和结束坐标300是滑动持续时间毫秒。模拟按键adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_BACK adb shell input keyevent KEYCODE_ENTER车机测试中常用的keyevent还有KEYCODE_VOLUME_UP、KEYCODE_VOLUME_DOWN、KEYCODE_MEDIA_PLAY_PAUSE等。5. 无线连接常见问题排查手册5.1 连接被拒绝与超时问题adb connect报“Connection refused”通常意味着车机的5555端口没有在监听。原因可能是adb tcpip 5555没有执行成功车机重启后ADB回到了USB模式车机防火墙拦截了5555端口排查步骤adb shell netstat -an | grep 5555如果看不到LISTEN状态的行说明ADB没有在TCP模式。重新插USB线执行adb tcpip 5555。如果报“Connection timed out”说明网络不通。先ping一下车机IPping 192.168.1.100ping不通的话检查电脑和车机是否在同一网段。车机连的是192.168.1.x电脑连的是192.168.0.x那肯定不通。5.2 设备显示offline或unauthorized无线连接下出现offline状态通常是ADB版本不匹配或者连接不稳定。先尝试adb disconnect adb kill-server adb start-server adb connect 192.168.1.100:5555如果还是offline检查车机上的ADB守护进程是否正常。有时候车机系统会杀掉ADB进程需要重新用USB线执行adb tcpip 5555。unauthorized在无线模式下比较少见因为授权是在USB阶段完成的。如果出现了说明车机的ADB密钥被清除了。重新用USB线连接在车机上重新授权。5.3 多网卡环境下的IP选择测试笔记本通常有多个网卡有线网卡、无线网卡、有时候还有USB网卡。车机连的是哪个网络电脑就必须在同一个网络里。Windows上查看所有网卡IPipconfig找到和车机同网段的那个网卡。如果电脑同时连着公司内网和车机热点ADB可能会走错网卡。解决办法是临时禁用其他网卡或者用adb connect时指定正确的IP。Linux和macOS下用ifconfig或ip addr查看。5.4 车机休眠与网络断连车机在熄火后通常会进入休眠状态WiFi断开ADB连接自然也就断了。这是正常现象不是bug。如果需要在车机休眠时保持连接得让车机保持常电状态但这在实车测试中通常做不到。部分车机有“保持网络连接”的开发者选项打开后可以在休眠时维持WiFi。但这样会增加暗电流长时间停放可能导致蓄电池亏电。测试完成后记得关掉。6. 提升无线ADB稳定性的实战经验6.1 固定IP与端口转发如果测试环境可控强烈建议在路由器上给车机绑定静态IP。这样每次连接不用查IP直接adb connect固定的地址就行。更进一步可以在电脑上写一个批处理脚本自动完成连接echo off adb disconnect adb kill-server adb start-server adb connect 192.168.1.100:5555 adb devices把这个保存成connect_car.bat双击就能连。我自己的习惯是把不同车机的IP写成不同的bat文件用的时候直接点。6.2 ADB命令的批量执行与脚本化车机测试中经常需要连续执行多条ADB命令。比如抓日志前先清缓冲区、设置日志级别、然后开始抓取adb logcat -c adb logcat -G 16M adb logcat -v threadtime logcat.txt把这些写成一个shell脚本或bat文件一键执行比手动敲命令快得多也不容易漏步骤。对于需要反复执行的测试用例可以用Python的subprocess模块调用ADBimport subprocess def adb_command(cmd): result subprocess.run(fadb {cmd}, shellTrue, capture_outputTrue, textTrue) return result.stdout # 示例获取当前前台应用 output adb_command(shell dumpsys activity activities | grep mResumedActivity) print(output)6.3 无线ADB的安全注意事项无线ADB在开放网络下是有安全风险的。同一网络中的其他人如果知道车机IP理论上可以连接ADB并执行命令。在测试环境中建议使用独立的测试热点不要连公司公共WiFi测试完成后执行adb usb把ADB切回USB模式如果车机支持设置ADB连接密码部分定制系统有这功能注意在整车上进行ADB操作时绝对不要执行可能影响车辆行驶安全的命令。比如不要随意修改CAN总线相关配置不要禁用安全气囊、制动系统相关的系统应用。测试ADB命令时确保车辆处于P挡、驻车制动已拉起的状态。6.4 从无线ADB到车载自动化测试的延伸无线ADB是车载自动化测试的基础。有了稳定的无线连接你可以进一步搭建自动化框架用Appium或UiAutomator做UI自动化用Python脚本批量执行测试用例结合Jenkins做持续集成用adb shell dumpsys获取系统状态做断言但所有这些的前提是无线连接足够稳定。我见过太多自动化脚本因为ADB断连而失败排查半天发现是车机WiFi休眠了。所以先把无线连接的基础打牢再往上搭自动化否则就是空中楼阁。7. 几个容易被忽略的细节最后分享几个我在实际项目中踩过的坑。车机上的ADB端口不一定非得是5555。有些车机厂商定制了ADB端口比如用5556或5557。如果你执行adb tcpip 5555后连不上试试其他端口。查看车机当前ADB端口的方法adb shell getprop service.adb.tcp.port。Windows防火墙会拦截ADB的入站连接。如果你在电脑上开了热点车机连电脑那电脑就是服务端防火墙可能拦截5555端口的入站。在Windows防火墙里给ADB加一条入站规则允许TCP 5555。车机的WiFi和ADB可能不在同一个网络命名空间。部分车机系统用了网络隔离WiFi在一个namespaceADB在另一个。这种情况下无线ADB根本连不上。解决办法是通过车机的以太网口连接或者用USB转以太网适配器。adb shell下的命令和车机上的实际shell可能不一样。车机的/system/bin/sh可能是精简版很多Linux命令没有。比如grep可能不支持-r参数find可能没有。遇到命令报错时先用adb shell which command_name确认命令是否存在。截图保存到电脑时注意路径。Windows下用adb exec-out screencap -p C:\Users\xxx\Desktop\screenshot.png路径不要有中文和空格否则可能失败。我习惯先cd到桌面再执行省得写长路径。这些细节看起来不起眼但在实际测试中每一个都可能让你多花半小时排查。ADB无线连接本身不复杂复杂的是车机系统的各种定制和限制。多积累多记录慢慢就有自己的排查套路了。