ADB命令实战5分钟搞定测试机短信、电话、定位模拟附常用命令清单在移动应用开发测试中模拟真实用户场景是验证功能可靠性的关键环节。想象一下你正在开发一款基于位置服务的社交应用需要测试用户在不同地理位置下的交互行为或者你的电商App需要验证短信验证码的接收逻辑。传统测试方法要么依赖真实设备操作要么需要复杂的模拟器配置效率低下且难以批量执行。而ADBAndroid Debug Bridge作为Android开发者的瑞士军刀提供了直接与设备交互的强大能力可以快速实现短信发送、电话模拟和GPS定位等核心测试需求。本文将带你深入ADB命令的实战应用不仅提供可直接复用的命令模板更会分享高效测试的技巧和常见问题解决方案。无论你是需要快速验证功能的开发者还是负责质量保障的测试工程师这些命令都能让你的测试效率提升数倍。我们会从基础环境配置讲起逐步深入到短信、电话、定位等核心功能的模拟实现最后还会给出一个经过实战检验的常用命令清单助你5分钟内完成测试环境搭建和功能验证。1. 环境准备与基础配置1.1 ADB工具安装与连接ADB是Android SDK的一部分首先确保你的开发环境已经安装最新版Android SDK Platform-Tools。对于Mac用户可以通过Homebrew快速安装brew install --cask android-platform-toolsWindows用户可以直接从[Android开发者官网]下载platform-tools包解压后将其路径添加到系统环境变量中。安装完成后在终端运行以下命令验证安装是否成功adb version连接测试设备有两种方式USB连接启用设备开发者选项中的USB调试模式通过数据线连接电脑Wi-Fi连接适合远程设备adb tcpip 5555 adb connect 设备IP:5555提示使用Wi-Fi连接时确保设备和电脑在同一局域网且防火墙未阻止5555端口。1.2 设备识别与授权列出当前连接的设备adb devices如果设备列表显示unauthorized需要在设备上弹出的授权对话框中点击允许。对于经常需要切换设备的情况建议给设备设置一个易记的别名adb -s 设备序列号 shell settings put global device_name 测试机A2. 短信功能模拟实战2.1 基础短信发送通过ADB发送短信有两种主流方式各有适用场景方法一使用telnet连接Android模拟器控制台adb -s emulator-5554 emu sms send 13800138000 您的验证码是123456这种方法适用于官方Android模拟器可以直接发送短信到模拟器的消息应用。方法二使用service call命令需root权限adb shell su -c service call isms 5 s16 com.android.mms s16 13800138000 s16 null s16 测试短信内容 s16 null s16 null参数说明isms 5表示调用短信服务的sendText方法第一个s16后接包名通常为com.android.mms第二个s16后接收件人号码第四个s16后接短信内容2.2 批量短信压力测试测试短信接收频率限制时可以使用简单的Shell脚本实现批量发送for i in {1..50}; do adb shell am broadcast -a android.provider.Telephony.SMS_RECEIVED --es sms_body 压力测试短信${i} sleep 0.5 done这个命令会模拟接收50条短信间隔0.5秒非常适合测试应用的短信轰炸防护机制。注意部分国产ROM可能修改了短信接收的广播Action如果上述命令无效可以尝试adb shell am broadcast -a com.android.mms.transaction.MessageReceiver -e from 13800138000 -e body 测试内容3. 电话功能模拟技术3.1 基础来电模拟模拟来电是测试通话相关功能的必备技能以下是几种实现方式官方模拟器专用命令adb -s emulator-5554 emu gsm call 13800138000物理设备通用方法需rootadb shell su -c service call phone 2 s16 13800138000这个命令会模拟来自13800138000的来电设备会正常响铃并显示来电界面。3.2 高级通话场景模拟模拟通话中状态adb shell am start -a android.intent.action.CALL -d tel:13800138000 adb shell input keyevent KEYCODE_CALL模拟通话挂断adb shell input keyevent KEYCODE_ENDCALL测试通话状态监听# 保持通话状态60秒 adb shell su -c service call phone 2 s16 13800138000 sleep 60 input keyevent KEYCODE_ENDCALL这个组合命令特别适合测试那些需要根据通话状态调整行为的应用比如游戏的通话暂停功能。4. 定位模拟全攻略4.1 单次定位设置ADB提供了两种主要的定位模拟方式geo fix命令设置静态位置adb shell am start-foreground-service --user 0 -n com.android.settings/.LocationSettings adb shell settings put secure location_providers_allowed gps adb shell su -c echo geo fix 116.404 39.915 100 /data/local/tmp/gpspipe这个示例将设备位置设置为北京天安门经度116.404纬度39.915高度100米。NMEA数据流注入模拟移动轨迹adb shell su -c echo -e \\\$GPGGA,064036.289,39.915,N,116.404,E,1,08,1.0,100.0,M,,,,*35\\n\\\$GPRMC,064036.289,A,39.915,N,116.404,E,0.0,0.0,010180,,*33 /data/local/tmp/gpspipeNMEA格式可以模拟设备移动适合测试导航类应用。4.2 轨迹模拟与路线测试对于需要测试连续位置变化的场景可以编写轨迹脚本import time import subprocess coordinates [ (116.404, 39.915), # 起点天安门 (116.408, 39.916), # 向东移动 (116.412, 39.918), # 东北方向 (116.415, 39.920) # 终点 ] for i, (lon, lat) in enumerate(coordinates): cmd fadb shell su -c echo \\geo fix {lon} {lat} 100\\ /data/local/tmp/gpspipe subprocess.run(cmd, shellTrue) print(f位置更新 {i1}/{len(coordinates)}: 经度 {lon}, 纬度 {lat}) time.sleep(5) # 每5秒更新一次位置将上述脚本保存为simulate_gps.py并运行设备就会按照设定的坐标序列移动非常适合测试地图应用的轨迹记录功能。5. 高效测试技巧与问题排查5.1 常用命令快捷方式将常用ADB命令封装为Shell函数可以大幅提高测试效率。在~/.bashrc或~/.zshrc中添加# 发送短信快捷命令 function sms() { adb -s $1 emu sms send $2 $3 } # 模拟来电快捷命令 function call() { adb -s $1 emu gsm call $2 } # 设置位置快捷命令 function locate() { adb shell su -c echo \geo fix $2 $3 100\ /data/local/tmp/gpspipe }使用示例sms emulator-5554 13800138000 测试短信 call emulator-5554 13800138000 locate emulator-5554 116.404 39.9155.2 常见问题解决方案问题一命令执行无响应检查设备是否已授权USB调试尝试重新插拔USB线或重新连接Wi-Fi重启ADB服务adb kill-server adb start-server问题二位置模拟不生效确保设备已开启允许模拟位置选项开发者选项中对于Android 10设备可能需要额外命令adb shell appops set 包名 android:mock_location allow问题三短信/电话模拟在物理设备上无效部分厂商ROM修改了相关服务接口可以尝试使用无障碍服务模拟点击adb shell am start -a android.intent.action.SENDTO -d sms:13800138000 --es sms_body 测试内容 adb shell input keyevent KEYCODE_DPAD_RIGHT adb shell input keyevent KEYCODE_ENTER附ADB测试命令速查表功能类别命令示例适用场景短信相关adb emu sms send 13800138000 内容模拟器短信发送adb shell service call isms 5 ...物理设备短信发送(需root)电话相关adb emu gsm call 13800138000模拟器来电模拟adb shell service call phone 2 s16 13800138000物理设备来电(需root)定位相关adb shell geo fix 经度 纬度设置静态位置adb shell geo nmea $GPRMC,...注入NMEA定位数据设备控制adb shell input keyevent KEYCODE_POWER模拟电源键adb shell screencap -p /sdcard/screen.png截取屏幕# 常用命令组合示例 # 1. 模拟收到短信并自动打开 adb shell am broadcast -a android.provider.Telephony.SMS_RECEIVED --es sms_body 验证码1234 adb shell am start -a android.intent.action.VIEW -d sms: # 2. 模拟来电后30秒自动挂断 adb shell su -c service call phone 2 s16 13800138000 sleep 30 input keyevent KEYCODE_ENDCALL # 3. 模拟从A点到B点的移动 adb shell geo fix 116.404 39.915 sleep 10 adb shell geo fix 116.410 39.918在实际测试中我发现将ADB命令与简单的Shell脚本结合可以构建出非常灵活的测试场景。比如测试一个打车应用时可以用一组命令模拟乘客下单、司机接单、车辆移动、到达目的地等完整流程而无需人工操作设备。这种自动化测试方法特别适合在持续集成环境中使用能够显著提高回归测试的效率。