ADB命令大全:一键控制Android设备的WiFi、蓝牙和热点(附实测代码)
ADB命令实战指南高效管理Android设备的无线连接每次面对十几台测试设备需要统一开启WiFi时手动操作简直是一场噩梦。直到我发现ADB命令可以批量控制所有设备的网络状态工作效率直接提升了十倍。这份指南将分享我多年积累的ADB实战经验涵盖WiFi、蓝牙和热点管理的核心技巧。1. 基础环境配置与权限管理在开始操作前确保你的开发环境已经准备就绪。ADB工具需要正确安装并配置环境变量同时Android设备需要开启开发者选项和USB调试模式。检查设备连接状态adb devices正常连接时会显示设备序列号和device状态。如果显示unauthorized需要在设备上确认USB调试授权。不同Android版本对ADB命令的权限要求差异很大。Android 6.0及以上版本通常需要额外授权# 检查当前ADB shell权限 adb shell whoami # 输出应为shell或root提示部分敏感操作如热点控制需要root权限。可以通过adb root命令尝试获取但厂商定制ROM可能限制此功能。常见权限问题解决方案问题现象可能原因解决方法Operation not permitted权限不足尝试adb shell su -c [command]Permission deniedSELinux限制临时关闭SELinuxadb shell setenforce 0No such file or directory命令路径错误使用完整路径如/system/bin/svc2. WiFi状态检测与控制技巧WiFi管理是自动化测试中最常用的功能之一。通过ADB可以精准获取当前连接状态、SSID、信号强度等信息还能实现无人值守的开关控制。检测WiFi状态的多种方法检查wpa_supplicant进程adb shell ps | grep wpa_supplicant进程存在通常表示WiFi正在运行。使用dumpsys获取详细状态adb shell dumpsys wifi | grep -E curState|SSID输出示例curStateActive SSID: Office_WiFi通过settings命令查询adb shell settings get global wifi_on返回1表示开启0表示关闭。WiFi开关的可靠方法方法一使用svc命令需系统权限adb shell svc wifi enable # 开启 adb shell svc wifi disable # 关闭方法二模拟设置界面操作兼容性强# 打开WiFi设置界面 adb shell am start -a android.settings.WIFI_SETTINGS # 模拟按键操作需根据设备调整 adb shell input keyevent 20 # 向下键 adb shell input keyevent 23 # 确认键 sleep 1 adb shell input keyevent 4 # 返回键方法三针对特定厂商的快捷方式# 华为设备快捷开关 adb shell am broadcast -a com.huawei.android.wifi.SET_WIFI_ENABLED --ez enable true注意不同Android版本和厂商ROM可能导致命令行为差异建议在实际设备上测试验证。3. 热点管理与多设备共享移动热点是设备间数据传输的重要通道但不同Android版本的热点控制API差异显著。以下是经过多机型验证的可靠方法。检测热点状态adb shell dumpsys wifi | grep mApInterfaceName有输出表示热点正在运行。热点控制命令集基础方法需要root# 开启WiFi热点 adb shell service call connectivity 24 i32 0 # 关闭WiFi热点 adb shell service call connectivity 25 i32 0兼容性更好的UI模拟方法# 打开热点设置界面 adb shell am start -n com.android.settings/.TetherSettings # 模拟操作开启热点按键顺序可能需调整 adb shell input tap 500 600 # 点击热点开关坐标 adb shell input keyevent 66 # 确认键热点配置修改# 查看当前热点SSID和密码 adb shell cat /data/misc/wifi/hostapd.conf # 修改热点配置需root adb shell echo ssidMyHotspot /data/misc/wifi/hostapd.conf adb shell echo wpa_passphrase12345678 /data/misc/wifi/hostapd.conf adb shell pkill -HUP hostapd多设备共享场景下可以考虑使用以下工作流主设备开启热点从设备自动连接执行测试任务关闭热点释放资源4. 蓝牙自动化控制方案蓝牙设备配对和连接在IoT测试中尤为常见。ADB提供了多种蓝牙控制方式但需要注意不同Android版本的兼容性问题。蓝牙状态检测命令方法一检查全局设置adb shell settings get global bluetooth_on方法二获取服务状态adb shell dumpsys bluetooth_manager | grep -E state|enabled方法三检查实际连接adb shell dumpsys bluetooth | grep -A 10 Bonded devices蓝牙控制实战代码基础开关控制# 立即开启蓝牙需要系统权限 adb shell service call bluetooth_manager 8 # 延迟生效的开关方式 adb shell settings put global bluetooth_on 1 adb shell am broadcast -a android.bluetooth.adapter.action.REQUEST_ENABLE设备配对自动化流程# 进入可发现模式 adb shell am start -a android.bluetooth.adapter.action.REQUEST_DISCOVERABLE # 模拟点击确认需根据界面调整坐标 adb shell input tap 800 1200 # 扫描设备 adb shell am start -a android.bluetooth.adapter.action.REQUEST_DISCOVERABLE # 配对目标设备需要知道MAC地址 adb shell am start -a android.bluetooth.devicepicker.action.LAUNCH --es android.bluetooth.devicepicker.extra.FILTER_TYPE 2 --es android.bluetooth.devicepicker.extra.DEVICE_ADDRESS 00:11:22:33:44:55蓝牙音频控制# 连接蓝牙音频设备 adb shell am start -a android.settings.BLUETOOTH_SETTINGS adb shell input keyevent 20 adb shell input keyevent 23 # 设置蓝牙音频为默认输出 adb shell media volume --stream 3 --set 155. 多设备批量管理策略当需要同时管理多台Android设备时ADB的多设备命令可以大幅提升效率。以下是几种实用的批量管理方案。设备筛选与定位# 获取所有连接设备的序列号 adb devices | tail -n 2 | cut -sf 1 # 根据设备属性筛选 adb devices | awk /model:Galaxy/ {print $1}并行执行命令# 使用for循环遍历设备 for device in $(adb devices | tail -n 2 | cut -sf 1); do adb -s $device shell svc wifi enable done # 使用xargs并行处理 adb devices | tail -n 2 | cut -sf 1 | xargs -I{} adb -s {} shell svc bluetooth enable状态监控与报告生成# 实时监控多设备WiFi状态 watch -n 5 adb devices | tail -n 2 | while read line; do device$(echo $line | cut -d -f1); state$(adb -s $device shell dumpsys wifi | grep curState); echo $device: $state; done自动化测试脚本示例#!/bin/bash # 初始化所有设备 for device in $(adb devices | tail -n 2 | cut -sf 1); do echo Processing $device # 重置网络状态 adb -s $device shell svc wifi disable adb -s $device shell svc bluetooth disable # 开启WiFi并连接测试AP adb -s $device shell svc wifi enable sleep 5 adb -s $device shell cmd wifi connect-network TestAP open # 验证连接 adb -s $device shell dumpsys wifi | grep connected to done在实际项目中我发现将常用命令封装成函数可以极大提高效率。例如这个函数可以快速检查所有设备的无线状态function check_wireless_status() { adb devices | tail -n 2 | while read line; do device$(echo $line | awk {print $1}) status$(echo $line | awk {print $2}) if [ $status device ]; then echo -n $device: wifi$(adb -s $device shell settings get global wifi_on) bt$(adb -s $device shell settings get global bluetooth_on) echo WiFi$wifi, Bluetooth$bt else echo $device: $status (not ready) fi done }