一、什么是adb
adb(Android Debug Bridge) 意为android调试桥,作用:远程访问Android设备(连接PC和Android)
ADB是一个C/S架构的应用程序,由三部分组成:
adb client, 运行在PC上(为DDMS,即IDE工作)
adb daemon(守护进程), 运行于Emulator(为与Emulator中的VM交互工作);
adb server(服务进程), 运行在PC(任务管理器上有),管理着adb client和adb daemon的通信。
adb连接逻辑:
二、安装及使用
Android platform-tools下载(参考):http://tools.android-studio.org/index.php/sdk;
配置环境变量:
打开终端Terminal,进入根目录(cd ~/);
在终端中输入vim ~/.bash_profile ,打开 .bash_profile文件。按 i 进入输入模式,在文件内容的末尾加入以下内容:
export PATH=${PATH}:/Users/xxx/Library/Android/sdk/platform-tools
export PATH=${PATH}:/Users/xxx/Library/Android/sdk/tools
这里面的xxx根据自己实际的用户名称进行修改
点击 esc ,输入 :wq 回车(保存并退出文本);
添加完成后输入:source ~/.bash_profile 更新配置的环境变量;
验证:输入adb version ,输出Android Debug Bridge version,配置成功;
三、adb常用命令
1、包安装:adb install
adb install .apk路径 / adb -r install .apk路径 / adb uninstall 包名
2、文件传输:adb pull/push
拉:adb pull <设备里的文件路径> [电脑上的目录]
推:adb push 电脑上文件 /sdcard
3、WiFi连接:adb connect/disconnect
adb tcpip 5555
adb connect xx.xx.xx.xx:5555
adb disconnect xx.xx.xx.xx:5555
4、日志打印:adb logcat
抓崩溃:adb logcat | grep AndroidRuntime
5、activity管理:adb shell am (activity manager)
启动APP:adb shell am start -W -n 包名/启动Activity
关闭APP:adb shell am force-stop 包名
6、包管理:adb shell pm(package manager)
清理环境:adb shell pm clear 包名
三方包名:adb shell pm list packages -3
7、截图录屏:adb shell screencap / adb shell screenrecord
截图:adb shell screencap -p /sdcard/test.png
录屏:adb shell screenrecord /sdcard/test.mp4
8、系统信息:adb shell dumpsys
1)活动:adb shell dumpsys activity
查看页面活动:adb shell dumpsys activity activities | grep mResumedActivity
2)电池:adb shell dumpsys battery
模拟低电量:adb shell dumpsys battery set level 1
复位:adb shell dumpsys battery reset
3)内存:adb shell dumpsys meminfo
查看app内存使用:adb shell dumpsys meminfo 包名
4)CPU: adb shell dumpsys cpuinfo
查看appCPU使用:adb shell dumpsys cpuinfo 包名
5) FPS:adb shell dumpsys gfxinfo
查看app流畅度:adb shell dumpsys gfxinfo 包名
9、adb shell wm
1)分辨率:adb shell wm size
模拟分辨率:adb shell wm size 480x1024
复位:adb shell wm size reset
2)密度:adb shell wm density
模拟密度:adb shell wm density 800
复位:adb shell wm size reset
10、adb shell input
1)adb shell input keyevent
按home键:adb shell input keyevent 3
2)adb shell input text
输入12345文本:adb shell input text 12345
3)adb shell input tap
点击位置(20,1000):adb shell input tap 20 1000
4)adb shell input swipe
从(10,20)滑动到(100,200):adb shell input swipe 10 20 100 200
others:
查看设备:adb devices 查看所有连接到电脑上的Android设备
安装软件:adb install app包名 (adb install -r app包名 | -r:覆盖安装)
查看包信息:adb shell dumpsys package XXX 查看某个包的具体信息(前提是需要知道包名是什么)
查看当前正在运行的Activity:adb logcat | grep ActivityManager adb logcat | grep Displayed
查看包名的方式:
adb shell pm list packages -3 -- 只输出第三方的包
adb shell pm list packages -e "daliketang" -- 设置过滤条件,只输出启用的包
卸载软件:adb uninstall app包名(在安装软件的时候,可能会出现安装失败的情况,如果在之前没有删除干净,或安装的时候会提示与安装签名不同等失败提示,此时使用uninstall命令可以完全清除之前没有卸载干净的app)
将电脑本地文件上传到android手机(adb push
adb push /Users/bytedance/Downloads/qingbei_xiaomi_v1.6.2_d59019f.apk /sdcard
将手机上文件上传电脑(adb pull
adb pull /sdcard/qingbei_xiaomi_v1.6.2_d59019f.apk ~/Downloads
查看日志:adb logcat > ~/Downloads/20200324.log (“>”是重定向的意思,将查到的日志进行输出;“>”后面的为输出的绝对路径)log日志
抓日志的前提条件:发现了一个crash/anr
日志级别:
i:infor信息
d:debug调试信息
w:waring警告信息
e:error报错信息
抓取日志的关注点:
crash:崩溃(日志中搜索crash或exception)
anr:application not response:应用无响(日志中搜索anr)
adb logcat *:e> ~/Downloads/2020.log (*:e:抓取e级别以上的所有信息)
小技巧:测试之前可以提前将手机开发者选项打开,找到“日志记录器缓冲区大小”,每个日志缓冲区选择“16M”;(其目的是在测试的过程中,如果出现了不可复现的crash,可以通过抓取日志的方式,获取到app之前记录的缓存日志)
monkey测试:也叫稳定性测试(稳定性测试、压力测试、随机测试三种不同的叫法)
monkey:像猴子一样乱点
目的:测试软件的稳定性,健壮性,压力
monkey命令:adb shell monkey -p com.edu.android.daliketang -v -v -v -s 16 200000 > ~/Downloads/monkeytest.log
-v:显示运行时候的日志信息级别(-v -v -v显示全部日志信息)
-s:种子数,随机事件数(两次命令的执行轨迹一样)
查看日志中是否存在异常情况,如搜索crash、anr等关键字 (正常结束的Monkey测试,日志的末尾处有finished关键字)
停止monkey的方式:
adb shell(登录设备)
top|grep "monkey" (实时查询monkey的进程号)
kill -9 11673(-9:强制杀死进程;11673为查询出来的进程号)
查看内存使用状况:adb shell dumpsys meminfo com.edu.android.daliketang
adb kill-server:关闭adb
adb start-server:打开adb
四、adb使用过程中常遇问题
mac下无法识别安卓设备:list of devices attached
出现原因:
开发者选项中没有开启usb调试;
可能是Mac没有将厂商的设备id识别,需手工输入;
解决方法:
打开终端,输入system_profiler SPUSBDataType命令,查询连接usb设备信息;
找到设备供应商id,Vendor ID,并记录下来;
终端输入:vim ~/.android/adb_usb.ini,把ID写入后,保存退出;
重启adb服务,adb kill-server;
打开adb,adb start-server;
终端输入adb devices,可以看到你的设备了;
当我们按照日志级别去查询日志时,会出现zsh:no matches found:*:E
出现原因:
zsh不兼容问题导致;
解决方法:
在终端输入:vim ~/.zshrc;
在~/.zshrc中加入:setopt no_nomatch,保存并退出;
在终端输入:source .zshrc命令,更新配置文件;
参考文档:
https://www.jianshu.com/p/5697889bd08b
https://www.cnblogs.com/bamanzi/p/zsh-simple-guide.html
https://www.jianshu.com/p/4d3d23856991
https://www.jianshu.com/p/d85e95f28338
https://www.jianshu.com/p/6769bfc3e2da
https://www.jianshu.com/writer#/notebooks/41473905/notes/57949214