6、ADB常用命令总结
一、adb概述
Android Debug Bridge 安卓调试桥。
用于通过电脑端来操作模拟器或真实设备的命令行工具。它存在于电脑端platform-tools目录下(adb.exe)。
adb是一种C/S架构的客户端-服务器程序,包括以下三个组件:
1、运行在pc端的adb client客户端:用于发送命令。客户端在开发机器上运行。您可以通过发出 adb 命令从命令行 终端调用客户端。命令行程序”adb”用于从shell或脚本中运行adb命令。首先“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。然后当设备的adbd和pc端的adb server建立连接后,adb client就可以向ADB servcer发送服务请求。
2、运行在设备端的常驻进程adb demon 守护程序 (adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务。
3、运行在pc端的adb server服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。ADB Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADB Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上。
二、下载及安装
方法1:只下载adb压缩包去解压即可
adb压缩包链接:https://pan.baidu.com/s/1QabEnfxAW11SOKKcRYUcig
提取码:wpr1
方法2:前提是已安装了Android Studio,它本身带有adb命令,如果配置好的Android Studio 一般都是可以直接调用adb命令的;如果不行,找到adb在SDK里的绝对路径,放入环境变量path中(绝对路径不带入adb.exe)
判断是否安装成功:
前提:配置好adb环境变量
打开dos窗口执行adb命令,输入adb version 查看版本 可看出是否安装成功
三、常用命令
adb shell : 进入手机内部,手机内部里面可以写linux命令,所以常见的linux命令在手机内部都可以使用
exit:退出手机内部
1、查看adb版本:adb version
2、启动 adb server 命令:adb start-server
3、停止 adb server 命令:adb kill-server
4、重启设备:adb reboot
5、屏幕截图:adb shell screencap /sdcard/Download/screen.png 截图存放在手机的/sdcard/Download目录下,名称为screen.png
6、屏幕录制:adb shell screenrecord /sdcard/Download/test.mp4
7、解锁:adb disable-verity
8、向手机端传递文件:adb push 目标文件路径 手机端SDCard存放路径
9、从手机端下载文件:adb pull 目标文件路径 电脑端存放路径 一般比如下载日志
10、启动一个APP、启动Activity、启动广播和服务:adb shell am start 包名
11、清除对应APP的数据和缓存:adb shell pm clear com.xxx【该命令清除掉APP的缓存,还能把APP的数据给清空】
12、查询已连接设备/模拟器:adb devices
首次使用adb devices,出现* daemon not running. starting it * daemon started successfully * 表示正在启动adb服务;
List of devices attached下方没出现任何信息,表示手机没连上电脑,或者电脑上没安装手机的驱动。插拔usb数据线,电脑屏幕出现无法识别的usb设备,表示手机驱动没安装好;
出现adb server version (32) doesn't match this client (36),表示adb端口冲突,被其它应用占用了,比如(91助手,手机管家之类的)【解决:卸载91助手,手机管家之类的】;
设备状态说明:
设备序列号+device:表示成功连接adb服务器。
设备序列号+unauthorized:表示手机未授权给电脑连接【解决:打开手机允许USB调试,USB连接配置选择MTP】;
设备序列号+offline:表示真机或者模拟器没有连接到adb 服务器 或者是没有响应。【解决:开启usb调试模式、关闭第三方手机助手软件、重启adb服务(命令:adb kill-server 、adb start-server)】
13、多个设备使用指令:adb -s 设备序列号 指令。
举例:给某个设备安装apk文件
adb -s 设备序列号 install xxx.apk
14、安装APK文件到手机上,绝对路径:
adb install <apk文件绝对路径>:适用于第一次安装,直接安装
覆盖安装:比如APK被改了,又不删除原来的APK版本 adb install -r <APK路径>
命令执行结果分析:
结果1:Failure[INSTALL_FAILED_ABORTED:User rejected permissious.]
表示用户拒绝安装(未关闭监控安装)
解决:打开手机-设置-开发者模式选项-关闭“监控ADB安装应用”
结果2:Failure[INSTALL_FAILED_ALREADY_EXISTS:Attempt to re-install 包名
without first uninstalling.]
表示手机中已安装该app
解决:adb install -r apk文件绝对路径 强制安装,覆盖存在app,不删除应用数据。
结果3:Failure[INSTALL_FAILED_VERSION_POWNGRADE.]
表示当前安装的app版本低于已经安装的应用版本。
解决:卸载已安装应用,再安装低版本app
命令参数:
-t :允许测试包
-l :锁定该应用程序
-d :允许降级覆盖安装,即安装的比手机上带的版本低。
-g :为应用程序授予所有运行时的权限
-r :替换已存在的应用程序,强制安装
-s :把应用程序安装在SD卡上
15、查看手机端安装的App包名
adb shell pm list packages 获取当前手机设备上的所有包名
adb shell pm list packages –f:在后面加上 -f ,能显示该APP的路径
adb shell pm list packages –3:在后面加上 -3 ,能显示第三方的包名
16、查找手机端某一个App包名
adb shell am monitor:输入命令后,手动在手机端启动需要获取包名的app,电脑端实时响应显示该包名。
adb shell dumpsys window w | findstr \/ |findstr name=:首先在手机打开需要获取报名的app,然后电脑端输入该命令。即显示正在运行的应用的包名。
17、卸载App
adb uninstall com.xxx:直接删除应用和所有数据 com.xxx是包名
adb uninstall -k com.xxx:删除应用,但保留应用数据和缓存数据。【输入该命令无法执行时可用adb shell cmd package uninstall -k】
ADB安装失败错误码:https://www.jianshu.com/p/65065b32bb50
四、系统进程命令
1、查看进程信息
adb shell ps:可在该命令后加包名,来查看某个应用程序的进程信息。
2、查看CPU使用情况
adb shell top:查看系统CPU使用情况。(ctrl+c结束)
五、事件模拟命令
Logcat
1、显示日志信息:adb logcat
2、将日志写入文件中:adb logcat > test.log
3、手机bug抓取日志:adb logcat -v time > test1.log -v的意思是显示日志时间 【进行操作bug的复现操作即可, logcat.log在cmd执行命令的文件下】
4、清除main缓存区域日志:adb logcat –c
5、清除所有日志:adb logcat -c -b main -b events -b radio -b system
6、抓取pad技师端http请求日志:adb logcat | findstr LogUtils
7、抓取日志输出到文件:adb logcat | findstr LogUtils > D:\LogInfo.log
8、抓取pad诊断中SFD日志:adb logcat | findstr OkGo
Input
备注:用的不多
1、模拟手势滑动:adb shell input swipe 100 200 100 300 700
# 从屏幕(100, 200)滑到(300,700),耗时100ms
2、模拟屏幕点击事件:adb shell input tap 100 750
# 在屏幕(100,750)点击一次
3、向屏幕发送信息,%s表示空格:adb shell input text "Hello%sWorld"
4、模拟长按:adb shell input swipe 100 200 100 100 200
# 按住屏幕(100,200),耗时100ms
5、模拟点按实体按钮的命令:adb shell input keyevent 25
# 调低音量,数字25是在AOSP源码中的KeyEvent类里卖弄定义的一个事件常量
Dumpsys
1、查看电池信息:adb shell dumpsys battery
2、只看关注运行的Activity结构层次,使用grep命令过滤:adb shell dumpsys activity | grep -i 'run'
3、查询Activity堆栈:adb shell dumpsys activity
4、获取包名和activity:aapt dump badging apk path
查看连接的设备:adb devices
如果发现多个设备,指定设备执行指令:adb –s 设备号 其他指令
adb截图命令:adb -s 0123456 shell screencap /sdcard/Download/1.png
adb录屏命令:adb -s 0123456 shell screenrecord /sdcard/Download/1.mp4
将手机文件拷贝到电脑:adb -s 0123456 pull /sdcard/Download/1.png d:\
将电脑文件拷贝到手机:adb -s 0123456 push d:\2.png /sdcard/Download
安装apk:adb -s 0123456 install d:\xxx.apk
覆盖安装:adb -s 0123456 install -r d:\xxx.apk
查看日志:adb -s 0123456 logcat
清除main缓存区域日志:adb logcat -c
清除所有日志:adb logcat -c -b main -b events -b radio -b system
过滤日志输出到文件:adb logcat | findstr LogUtils > D:\info.log
查看手机端安装的所有app包名:adb –s 0123456 shell pm list packages
向屏幕输入一些信息:adb –s 0123456 shell input text “hahaha”
模拟点击屏幕:adb –s 0123456 shell input tap 500 1400
模拟手势滑动:adb –s 0123456 shell input swipe 100 500 1400 100
模拟点按实体按钮:adb –s 0123456 shell input keyevent 25
查看电池信息:adb –s 0123456 shell dumpsys battery
查看进程信息:adb –s 0123456 shell ps
获取包名和activity:aapt dump badging apk path
抓取pad诊断中SFD日志:adb logcat | findstr OkGo
抓取pad技师端http请求日志:adb logcat | findstr LogUtils
六、adb shell下的am 与 pm
am
am全称activity manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等等。当你在adb shell命令下执行am命令:
am <command>
-
启动app am start -n {packageName}/.{activityName}
-
杀app的进程 am kill <packageName>
-
强制停止一切 am force-stop <packageName>
-
启动服务am startservice
-
停止服务 am stopservice
-
打开简书 am start -a android.intent.action.VIEW -d http://www.jianshu.com/
-
拨打10086 am start -a android.intent.action.CALL -d tel:10086
-
解锁屏 adb shell input keyevent 82
-
发送广播 am broadcast
-a <ACTION>: 指定Intent action, 实现原理Intent.setAction();
-n <COMPONENT>: 指定组件名,格式为{包名}/.{主Activity名},实现原理Intent.setComponent();
-d <DATA_URI>: 指定Intent data URI
-t <MIME_TYPE>: 指定Intent MIME Type
-c <CATEGORY> [-c <CATEGORY>] ...]:指定Intent category,实现原理Intent.addCategory()
-p <PACKAGE>: 指定包名,实现原理Intent.setPackage();
-f <FLAGS>: 添加flags,实现原理Intent.setFlags(int ),紧接着的参数必须是int型;
pm
pm全称package manager,你能使用pm命令去模拟Android行为或者查询设备上的应用等,当你在adb shell命令下执行pm命令:
pm <command>
-
列出手机所有的包名 pm list packages
-
安装/卸载 pm install/uninstall
-
清除数据 pm clean "package.name"