使用adb调试Android技巧
做测试不会用ADB这份Android调试桥实战指南请收好大家好今天这篇文章主要聊聊怎么在移动应用测试里用好Android调试桥ADB以及它到底能帮我们解决哪些实际问题。相信大家对测试基础都有所了解我就不赘述项目环境搭建那些琐事了。ADB的功能一直在迭代我这里分享一些能切实提升工作效率的实用技巧。因为我平时做移动端测试主要在macOS上毕竟它能通吃主流移动平台所以下面的演示以macOS为主用Windows的朋友如果命令有细微出入还请见谅哈。为了逻辑顺畅咱们先从最基本的命令开始。一、 设备连接与列表查看通常我们只连一台设备但有时候会通过TCP/IP连多台。这时候就得手动指定要在哪台设备上跑命令了。查看连接设备列表adb devices-l加-l参数能看到更详细的属性当你连了好几台设备分不清谁是谁时这招很有用。指定设备执行命令格式为adb -s 设备序列号 命令。# 比如给序列号为 32312b96 的手机装个包adb-s32312b96install~/Downloads/app-release.apk如果同时连着真机和模拟器用-d(真机) 和-e(模拟器) 参数会更方便。无线连接TCP/IP前提是手机和电脑在同一Wi-Fi下。先用数据线连上开启TCP/IP模式adb tcpip 5555查看手机IP设置里看或用命令adb shell ifconfig wlan0。连接adb connect 192.168.1.100:5555想切回USB模式adb usb二、 应用安装、卸载与包名那点事安装APKadbinstall~/path/to/your_app.apk常用参数-d允许降级安装覆盖低版本。-r保留数据重装。-g安装时默认授予所有运行时权限省得装完还得点一堆弹窗。查找包名并卸载卸载应用必须知道包名Package Name。# 列出所有包并过滤关键词adb shell pm list packages|greptencent# 卸载adb uninstall com.tencent.mm# 卸载但保留数据和缓存-k参数adb uninstall-kcom.tencent.mm# 清除应用数据和缓存这招很常用adb shell pmclearcom.tencent.mm三、 如何从手机里“掏”出APK文件有时候我们需要对比线上的包和本地的包这时候知道怎么把手机里的安装包拽出来就很方便。先找到APK的安装路径adb shell pm path com.example.myapp# 输出类似package:/data/app/~~随机字符/com.example.myapp-随机字符/base.apk把文件拉到电脑上adb pull /data/app/~~随机字符/com.example.myapp-随机字符/base.apk ~/Desktop/四、 文本输入与特殊字符处理要在输入框里灌入长文本或特殊字符测试时手动敲太慢了。基础输入注意ADB原生对中文支持不佳英文数字没问题# 空格需要用 %s 替代adb shell input text Hello%sWorld输入剪贴板内容macOS专属技巧adb shell input text$(pbpaste|sed-es/ /\\%s/g)这个命令会把电脑剪贴板里的内容自动处理好空格并发送到手机输入框。五、 深链Deep Link测试环境不稳定、推送收不到但又急着看跳转效果直接调起Activity是测试的必备技能。# 注意链接中的 符号前要加反斜杠 \ 转义adb shell am start-W-aandroid.intent.action.VIEW-dmyapp://open/trip/detail\\id12345com.example.myapp这能帮你验证各种奇怪的跳转逻辑比如跳转到失效页面会不会导致应用崩溃。六、 截图与录屏报Bug没图没真相ADB也能搞定。截图一条龙直接保存到电脑当前目录adb exec-out screencap-p~/Desktop/bug_screenshot.png录制屏幕# 开始录制默认最长180秒adb shell screenrecord /sdcard/demo.mp4# CtrlC 停止录制后拉到电脑上adb pull /sdcard/demo.mp4 ~/Desktop/七、 模拟系统杀死进程后的状态恢复这是一个很容易漏测的场景用户切后台去回微信过一会儿手机内存不够系统把我们的App进程杀了。用户再切回来时页面状态还能恢复吗# 模拟系统强杀进程adb shell amkillcom.example.myapp然后点击图标重新打开App检查页面和输入框数据是否还在。我们曾经就在这上面踩过坑导致线上出现崩溃希望大家引以为戒。八、 日志抓取与分析App崩了不要慌先拉日志。实时刷屏看错误adb logcat-vtime*:E|grepcom.example.myapp复现前清空缓冲区导出干净日志adb logcat-c# 清空缓冲# ... 复现Bug ...adb logcat-d~/Desktop/crash_log.txt九、 电池与省电模式模拟现在的Android系统有Doze模式瞌睡模式和应用待机模式测试App在省电状态下的表现很重要。强制进入Doze模式adb shell dumpsys battery unplug# 拔掉电源adb shell dumpsys deviceidleenable# 开启空闲模式开关adb shell dumpsys deviceidle force-idle# 强制进入瞌睡测试完别忘了恢复正常adb shell dumpsys deviceidle unforce adb shell dumpsys battery reset十、 分辨率适配与Monkey测试临时改分辨率看看UI在大屏或小屏上会不会错乱adb shell wm size 1080x2400# 自定义宽高adb shell wm density480# 调整密度# 恢复adb shell wm size reset adb shell wm density resetMonkey随机压力测试# 对 com.example.myapp 执行500次随机点击间隔300msadb shell monkey-pcom.example.myapp--throttle300-v500写在最后ADB的功能非常庞大远不止今天聊到的这些。技术在不断更新可能明天有些命令的用法就变了。重要的是掌握查找问题的方法和思路。希望今天整理的内容能对各位的日常工作有所帮助。