批量管理Android设备Wi-Fi的自动化实践指南
在测试实验室里,二十台Android设备同时亮起屏幕,工程师小王正逐台点击设置菜单切换Wi-Fi网络。这种重复劳动不仅效率低下,还容易因人为操作失误导致测试结果不一致。事实上,通过adb shell cmd wifi命令配合Shell脚本,完全可以实现一键批量控制所有设备的网络状态。
1. 基础环境搭建与核心命令解析
1.1 准备工作:adb环境配置
确保开发机已安装Android Platform Tools(包含adb工具),建议版本不低于30.0.0。可通过以下命令验证:
adb --version对于多设备管理,需要先获取已连接设备的序列号列表:
adb devices -l典型输出示例:
emulator-5554 device product:sdk_gphone64_x86_64 model:sdk_gphone64_x86_64 84B7T16A123456 device usb:1-2 product:walleye model:Pixel_21.2 Wi-Fi系统服务命令精要
cmd wifi是Android 9+引入的系统服务接口,比传统svc wifi命令提供更精细的控制能力。核心功能包括:
状态查询:
adb shell cmd wifi status返回JSON格式的详细状态信息,包含连接状态、IP地址、信号强度等
开关控制:
# 启用Wi-Fi adb shell cmd wifi set-wifi-enabled enabled # 禁用Wi-Fi adb shell cmd wifi set-wifi-enabled disabled网络连接(支持WPA3等新协议):
adb shell cmd wifi connect-network "TEST_SSID" wpa3 "password123" -b 00:11:22:33:44:55
2. 多设备批量管理实战方案
2.1 设备并行处理框架
创建基础脚本框架wifi_manager.sh:
#!/bin/bash # 设备列表数组 DEVICES=($(adb devices | awk 'NR>1 {print $1}')) # 并行执行函数 function parallel_exec() { local cmd=$1 for device in "${DEVICES[@]}"; do adb -s $device shell "$cmd" & done wait }2.2 典型批量操作示例
场景一:统一开启所有设备Wi-Fi
parallel_exec "cmd wifi set-wifi-enabled enabled"场景二:连接到测试专用网络
for device in "${DEVICES[@]}"; do adb -s $device shell "cmd wifi forget-network 1" # 先移除旧配置 adb -s $device shell "cmd wifi connect-network 'QA_LAB' wpa2 'Test@123'" done场景三:收集所有设备信号强度
for device in "${DEVICES[@]}"; do echo "$device: $(adb -s $device shell "cmd wifi status | grep rssi")" done2.3 高级功能:热点批量配置
创建移动热点并设置5GHz频段:
parallel_exec "cmd wifi start-softap 'TEST_AP' wpa2 'ApPassword' -b 5"关键参数说明:
| 参数 | 选项 | 说明 |
|---|---|---|
| -b | 2 | 2.4GHz频段 |
| 5 | 5GHz频段 | |
| 6 | 6GHz频段(Android 12+) |
3. 生产环境优化策略
3.1 设备连接稳定性保障
adb TCP/IP模式:对于有线连接的设备,切换为无线adb可减少USB集线器压力
adb tcpip 5555 adb connect 192.168.1.100:5555心跳检测机制:
function check_alive() { while true; do adb devices | grep $1 || { echo "Reconnecting $1..." adb connect $1 } sleep 30 done }
3.2 错误处理与日志收集
增强版执行函数示例:
function safe_exec() { local device=$1 local cmd=$2 local retries=3 for ((i=1; i<=retries; i++)); do output=$(adb -s $device shell "$cmd 2>&1") if [ $? -eq 0 ]; then echo "[SUCCESS] $device: $output" return 0 fi sleep 1 done echo "[ERROR] $device: $output" >> wifi_errors.log return 1 }4. 企业级应用场景扩展
4.1 自动化测试集成
与Jenkins Pipeline集成示例:
stage('Wi-Fi Setup') { steps { script { def devices = sh(script: 'adb devices | tail -n +2 | cut -f1', returnStdout: true).trim().split('\n') devices.each { device -> sh """ adb -s ${device} shell cmd wifi set-wifi-enabled enabled adb -s ${device} shell cmd wifi connect-network 'QA_NETWORK' wpa2 '\${WIFI_PASSWORD}' """ } } } }4.2 设备分组管理策略
基于设备类型实施差异化配置:
declare -A DEVICE_GROUPS DEVICE_GROUPS["high_perf"]="192.168.1.10 192.168.1.11" DEVICE_GROUPS["legacy"]="192.168.1.20" for group in "${!DEVICE_GROUPS[@]}"; do case $group in "high_perf") for device in ${DEVICE_GROUPS[$group]}; do adb -s $device shell "cmd wifi start-softap 'PERF_AP' wpa2 'ComplexP@ss' -b 6" done ;; "legacy") for device in ${DEVICE_GROUPS[$group]}; do adb -s $device shell "cmd wifi set-wifi-enabled enabled" done ;; esac done在实际项目中,我们发现设备固件差异可能导致命令响应不同。例如某些厂商定制ROM需要额外延迟:
adb -s $device shell "cmd wifi set-wifi-enabled enabled && sleep 2"