ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

车载测试必备:ADB无线连接车机全流程与避坑指南

车载测试必备:ADB无线连接车机全流程与避坑指南 1. 为什么车载测试绕不开ADB无线连接做车载测试这行的朋友都清楚车机调试和手机调试最大的区别就是距离感。手机拿在手里一根Type-C线插上就能干活但车机装在仪表台里你总不能每次调试都趴在副驾驶手套箱下面找USB口吧尤其是做车载自动化测试的时候测试台架上的车机可能离你的工位好几米远有线连接根本不现实。ADB无线连接就是解决这个痛点的核心手段。简单说它让ADBAndroid Debug Bridge通过WiFi网络跟车机通信彻底摆脱线缆束缚。你坐在工位上车机在台架上跑着日志照样抓、截图照样存、应用照样装。对于做车载测试、车载自动化测试、甚至车载渗透测试的工程师来说这是必须掌握的基本功。我见过不少刚入行的兄弟面试车载测试面试题的时候被问到怎么无线连接车机就卡壳了或者连上了但adb unauthorized搞半天解决不了。这篇文章就把整个流程拆透从原理到实操到排查5分钟能搞定的操作我让你3分钟就上手。适合谁看刚入行车载测试的新人、从手机测试转车机测试的老手、需要远程调试车机的开发工程师以及做车机应用适配的测试人员。不需要你有多深的Android底层知识只要会用基本的ADB命令就行。2. 无线连接的核心原理与前置条件2.1 ADB无线连接到底是怎么工作的很多人会用但说不清原理面试的时候容易吃亏。ADB的架构是典型的C/S模式ADB Server跑在你的电脑上ADB Daemonadbd跑在车机上。有线连接时两者通过USB通道通信无线连接时通过TCP/IP协议在网络上通信。具体流程分两步第一步车机的adbd需要监听一个TCP端口默认5555这步通常需要先用USB线连一次执行adb tcpip 5555来切换模式第二步电脑上的ADB Client通过adb connect 车机IP:5555跟车机建立TCP连接。连接建立后后续所有ADB命令都走网络通道跟有线没区别。注意部分车机厂商在系统层面限制了adbd的TCP监听能力这种情况下adb tcpip 5555会报错。遇到这种车机要么找厂商要工程模式权限要么走串口调试方案。2.2 动手之前必须确认的四件事别急着敲命令先把下面这几项确认清楚能省掉80%的排查时间车机和电脑在同一局域网这是最基础的。车机连的WiFi和你电脑连的WiFi必须是同一个网段。我遇到过车机连的是车机自带热点、电脑连的是办公室WiFi两个网段根本不通折腾半天才发现。车机已开启开发者模式和USB调试不同车机开启方式不一样。大部分在设置-关于本机里连续点击版本号7次但车机通常藏得更深有些需要在工程模式里开有些需要输入特定密码。航盛车机、中兴方案的车机开启方式各不相同建议提前查对应车型的文档。电脑已安装ADB工具推荐用adb platform tools官方包版本不要太老。Windows下如果提示windous10管理员找不到adb说明环境变量没配好后面会讲怎么处理。知道车机的IP地址在车机的WiFi设置里能看到或者用adb shell ifconfig查有线连接时。2.3 有线转无线的标准操作路径整个流程可以概括为先有线、后无线用USB线连接车机和电脑确认adb devices能看到设备执行adb tcpip 5555让车机adbd切换到TCP模式拔掉USB线执行adb connect 车机IP:5555确认adb devices显示已连接看起来简单但每一步都有坑。下面逐个拆解。3. 5分钟实操从有线到无线的完整流程3.1 环境准备与ADB工具配置先说工具。adb工具建议直接下载Google官方的platform-tools包解压到某个目录比如D:\platform-tools。然后把这个目录加到系统环境变量Path里。Windows下配置步骤右键此电脑-属性-高级系统设置-环境变量在系统变量的Path里新增一条D:\platform-tools打开新的cmd窗口输入adb version能显示版本号就说明配好了如果提示windous10管理员找不到adb通常是两个原因一是环境变量没生效需要重开cmd窗口二是Path里配的路径不对。还有一种情况是以管理员身份运行的cmd和普通cmd的环境变量不一致这个坑我踩过建议统一用普通权限的cmd。Linux和macOS下更简单解压后把路径加到.bashrc或.zshrc里就行。macOS如果提示权限问题执行chmod x platform-tools/adb。提示车机测试建议固定用一个版本的platform-tools不要频繁升级。不同版本的ADB协议有细微差异某些老车机对新版ADB兼容性不好。3.2 车机端开发者选项开启要点这一步是很多新人卡住的地方。手机上的操作大家都会但车机不一样。大部分Android车机的开启路径是设置-关于本机-连续点击版本号7次。但车机厂商通常会做定制常见变体包括点击MCU版本或硬件版本而不是版本号需要先进入工程模式通常输入密码如*#*#8888#*#*或特定数字组合在系统设置-开发者选项里直接有USB调试开关但默认隐藏老款创维、中兴b860av2.1t这类方案的车机开启方式又不一样有些需要刷特定固件才能打开ADB。这类情况建议先查对应车型的论坛帖子或者直接问厂商FAE要工程模式进入方法。开启后在开发者选项里找到USB调试并打开。部分车机还有USB调试安全设置或仅充电模式下允许ADB调试这类选项建议一并打开。3.3 有线连接确认与TCP模式切换USB线连上车机后在电脑上执行adb devices正常应该输出类似List of devices attached 0123456789ABCDEF device如果显示unauthorized说明车机上没有授权这台电脑。看车机屏幕应该会弹出一个允许USB调试的对话框勾选始终允许并确认。如果没弹窗可能是车机屏幕没亮或者对话框被其他应用遮挡了。如果显示offline通常是ADB版本不匹配或者车机adbd异常尝试重启车机的adbdadb kill-server然后adb start-server。确认设备是device状态后执行adb tcpip 5555正常输出restarting in TCP mode port: 5555。这时候车机的adbd已经切换到TCP监听模式了。注意有些车机执行adb tcpip 5555后会立即断开USB连接这是正常的。也有些车机会保持USB连接同时开启TCP两种都行。3.4 无线连接建立与验证拔掉USB线先确认车机IP。如果之前没记可以在拔线前用adb shell ifconfig wlan0查一下记下inet addr后面的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看到这个就说明无线连接成功了。整个过程熟练的话真的用不了5分钟。3.5 无线连接下的常用操作验证连上之后验证几个常用操作确保通道正常# 截图并保存到电脑 adb exec-out screencap -p screenshot.png # 抓取日志 adb logcat -v time logcat.txt # 安装应用 adb install app.apk # 拉取文件 adb pull /sdcard/test.log ./adb 截图保存电脑这个操作在车载测试里用得特别多因为要记录测试过程中的界面状态。用exec-out比shell screencap再pull的方式快很多推荐用前者。adb logcat 抓取日志也是高频操作建议加上-v time显示时间戳方便跟测试用例对应。4. 高频问题排查与避坑指南4.1 连接失败类问题速查问题现象可能原因解决方法unable to connectIP错误或端口不通ping车机IP确认网络通检查5555端口connection refusedadbd未监听TCP重新执行adb tcpip 5555adb unauthorized未授权电脑车机屏幕确认授权弹窗或删除~/.android/adbkey重连device offlineADB版本不匹配换用platform-tools版本或重启adbd连接后频繁断开WiFi信号弱靠近路由器或改用5GHz频段adb unauthorized怎么解决是问得最多的问题。核心原因是车机上没有记录你这台电脑的公钥。解决方法在车机上删除/data/misc/adb/adb_keys需要root或者在电脑上删除~/.android/adbkey和adbkey.pub后重新连接让车机重新弹授权框。4.2 网络层问题的排查思路无线连接本质是网络通信网络不通什么都白搭。排查顺序ping车机IPping 192.168.1.100不通说明网络层有问题检查网段电脑和车机是否在同一网段子网掩码是否一致检查防火墙Windows防火墙可能拦截了5555端口临时关闭测试检查AP隔离有些企业WiFi开启了AP隔离设备之间不能互访这种情况需要换网络我遇到过最坑的一次是车机连的WiFi开启了客户端隔离电脑怎么都连不上最后换了个手机热点才解决。所以测试环境尽量用可控的网络。4.3 车机厂商定制带来的特殊问题不同车机厂商对ADB的限制程度不同。航盛车机相对开放基本按标准流程走就行。但有些厂商会禁用adb tcpip命令限制adbd只能通过USB通信在系统层拦截ADB连接请求遇到这种情况可以尝试用adb shell setprop service.adb.tcp.port 5555手动设置端口然后adb shell stop adbd adb shell start adbd检查是否有厂商定制的ADB开关有些在工程模式里有网络ADB调试选项实在不行走串口调试或者找厂商要调试权限4.4 无线连接稳定性优化技巧无线连接虽然方便但稳定性不如有线。几个优化建议固定车机IP在路由器里给车机MAC地址绑定固定IP避免IP变化导致重连使用5GHz WiFi2.4GHz干扰大5GHz更稳定保持ADB Server常驻不要频繁adb kill-server保持连接设置超时重连在自动化脚本里加心跳检测断了自动重连对于车载自动化测试场景建议写个简单的重连脚本#!/bin/bash while true; do adb connect 192.168.1.100:5555 if adb devices | grep -q 192.168.1.100:5555; then echo Connected break fi sleep 2 done5. 无线ADB在车载测试中的进阶用法5.1 自动化测试中的ADB命令组合无线连接建立后可以玩的东西就多了。车载自动化测试常用的命令组合# 模拟按键 adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_BACK # 模拟点击坐标 adb shell input tap 500 800 # 滑动 adb shell input swipe 500 1000 500 200 # 获取当前Activity adb shell dumpsys activity activities | grep mResumedActivity # 获取UI层级 adb shell uiautomator dump /sdcard/ui.xml adb pull /sdcard/ui.xml ./adb shell uiautomator dump是UI自动化测试的核心但有时候会提示adb shell uiautomator dump用不了通常是权限问题或者UI线程卡住。解决方法加--compressed参数或者先adb shell settings put global window_animation_scale 0关闭动画。5.2 日志抓取与性能监控adb logcat 抓取日志在车载测试里是家常便饭。几个实用技巧# 按TAG过滤 adb logcat -s TAG_NAME:V # 按优先级过滤 adb logcat *:E # 清空日志缓冲 adb logcat -c # 保存到文件并带时间戳 adb logcat -v time -f /sdcard/logcat.txt性能监控方面可以用# CPU占用 adb shell top -n 1 # 内存占用 adb shell dumpsys meminfo package_name # 电池状态车机上可能不适用 adb shell dumpsys battery5.3 车机应用调试的特殊场景车机应用调试跟手机有几个不同点屏幕分辨率差异大车机屏幕可能是横屏、异形屏坐标计算要注意多屏互动有些车机有仪表屏和中控屏ADB操作要指定display系统权限更高车机应用经常需要系统级权限调试时注意SELinux状态高德地图车机版、百度输入法车机版这类应用的适配测试经常需要反复安装卸载。用无线ADB可以批量操作# 批量安装 for apk in *.apk; do adb install -r $apk; done # 批量卸载 adb shell pm uninstall package_name # 清除应用数据 adb shell pm clear package_name5.4 多设备管理与批量操作测试台架上可能同时有多台车机无线ADB可以同时管理# 连接多台设备 adb connect 192.168.1.100:5555 adb connect 192.168.1.101:5555 # 指定设备执行命令 adb -s 192.168.1.100:5555 shell input keyevent KEYCODE_HOME adb -s 192.168.1.101:5555 shell input keyevent KEYCODE_HOME # 所有设备执行同一命令 adb devices | grep -v List | awk {print $1} | xargs -I {} adb -s {} shell input keyevent KEYCODE_HOME这个在多车机并行测试时特别有用效率提升明显。6. 几个我踩过的坑和私藏技巧6.1 那些年踩过的ADB坑坑一车机重启后无线连接失效。这是必然的因为adbd重启后默认回到USB模式。解决方法把adb tcpip 5555做成开机自启脚本或者用adb shell setprop persist.adb.tcp.port 5555持久化设置需要root。坑二IP地址冲突。测试环境里设备多DHCP分配的IP可能冲突。建议在路由器里做MAC-IP绑定或者用静态IP。坑三ADB Server被其他程序占用。有些手机助手类软件会占用5037端口导致ADB起不来。解决方法netstat -ano | findstr 5037找到占用进程杀掉或者改ADB端口。坑四车机休眠导致连接断开。车机为了省电会休眠WiFi断开后ADB连接自然就断了。测试时可以在开发者选项里关闭休眠或者用adb shell svc power stayon true保持唤醒。6.2 提升效率的私藏技巧技巧一用alias简化命令。在.bashrc或.zshrc里加alias adbcadb connect 192.168.1.100:5555 alias adbdadb devices alias adbsadb exec-out screencap -p screenshot.png技巧二用scrcpy做无线投屏。scrcpy支持ADB无线连接可以把车机屏幕投到电脑上鼠标直接操作比input tap方便多了。技巧三日志实时过滤。用adb logcat | grep --line-buffered 关键字实时过滤关心的日志避免被海量日志淹没。技巧四批量截图脚本。测试过程中需要定期截图记录状态写个循环脚本for i in $(seq 1 10); do adb exec-out screencap -p screenshot_$i.png sleep 5 done6.3 面试中常被问到的ADB问题车载测试面试题里ADB相关的出现频率很高几个高频问题adb devices显示unauthorized怎么处理答车机端确认授权弹窗或删除电脑端adbkey重新授权。adb tcpip和adb connect的区别答tcpip是让车机adbd切换到TCP监听模式connect是电脑主动连接车机的TCP端口。无线连接不稳定怎么优化答固定IP、用5GHz、加心跳重连、关闭车机休眠。adb logcat怎么过滤答用-s TAG按标签过滤用*:E按优先级过滤用grep做关键字过滤。这些问题看起来简单但能答全的人不多。建议把上面的排查表格背下来面试时能直接说出来。6.4 安全与合规注意事项最后说个容易被忽视的点车载渗透测试和普通调试的边界。在企业环境里做ADB调试要注意不要在生产车辆上随意开启ADB可能影响车辆安全调试用的车机应该是台架设备或测试车辆不要碰用户车辆ADB抓取的日志可能包含敏感信息注意脱敏和保管测试完成后及时关闭ADB调试开关这些不是技术问题但作为从业者必须心里有数。整个流程走下来从环境准备到无线连接建立再到问题排查和进阶用法核心就是先有线后无线这个路径。熟练之后真的5分钟能搞定剩下的时间都花在排查各种奇葩问题上。我个人的经验是把常见问题的排查表打印出来贴在工位上遇到问题对照着查比临时百度快得多。另外测试环境尽量自己搭一套可控的网络别用公司公共WiFi能省掉一半的玄学问题。
返回列表