Android 常用 adb 命令总结
Android 常用 adb 命令总结
adb ( 全称为Android Debug Bridge)是一个C/S 架构命令行工具,起到调试桥的作用,是连接Android手机与PC端的桥梁,方便我们在电脑上对手机进行操作。adb 命令可用于执行各种设备操作,如安装和调试应用。
ADB和Fastboo最新Google官方下载地址:https://developer.android.com/studio/releases/platform-tools?hl=zh-cn,或点击下面对应链接下载
Windows:https://dl.google.com/android/repository/platform-tools-latest-windows.zip?hl=zh-cn
Mac:https://dl.google.com/android/repository/platform-tools-latest-darwin.zip?hl=zh-cn
Linux:https://dl.google.com/android/repository/platform-tools-latest-linux.zip?hl=zh-cn
针对移动端 Android 的测试, 熟练使用adb命令, 将会为给 Android 测试带来很大的便利,其中很多命令也会用于自动化测试的脚本当中。
下面主要介绍,adb 和 adb shell 命令、linux 命令只列出,不详解。以上三个部分:
adb 命令
在配好环境变量的前提下,在命令窗口当中输入 adb help 或者直接输入 adb ,将会列出所有的选项说明及子命令。
下面正式开始介绍 adb 命令、adb shell 命令 ~ 坐稳扶好 ~ 发车了 ~~~
在开发或者测试的过程中,我们可以通过 adb 来管理多台设备,其一般的格式为:
adb [-e | -d | -s <设备序列号>] <子命令>
-
adb devices , 获取设备列表及设备状态
C:\Users\mkcshwzx>adb devices
List of devices attached
47e965af device
-
adb get-state , 获取设备的状态
C:\Users\mkcshwzx>adb get-state
device设备的状态有 3 钟,device , offline , unknowndevice:设备正常连接offline:连接出现异常,设备无响应unknown:没有连接设备
-
adb kill-server , adb start-server , 结束 adb 服务, 启动 adb 服务,通常两个命令一起用
一般在连接出现异常,使用 adb devices 未正常列出设备, 设备状态异常时使用 kill-server,然后运行 start-server 进行重启服务
-
adb logcat , 打印 Android 的系统日志
adb logcat
打印log至命令窗口,Ctrl + C停止打印log
adb logcat -c
-c 清空所有的日志缓存信息
adb logcat -g
-g 查看日志缓冲区信息
adb logcat -t
-t 输出最近的几行日志, 输出完退出, 不阻塞;
例如:adb logcat -t 5
adb logcat -s
设置输出日志的标签, 只显示该标签的日志;
例如:adb logcat -s System.out
adb logcat -v time > D:\Logcat\logcat.log
-v 设置日志的输出格式, 注意只能设置一项
例如:日志保存到D:\Logcat\目录下
adb logcat -v time > D:\Logcat\logcat.log
adb logcat | grep wifi
过滤固定字符串 : 只要命令行出现的日志都可以过滤, 不管是不是标签
例如:adb shell | findstr wifi
说明:
管道符“|”:可以把标准的输入流与标准的输出流进行合并,或者把某个命令的标准输出流作为另一个命令的标准输入流。
exit退出shell。
由于grep为linux命令,运行单条adb shell 时并没有进入linux
shell环境,并不能用grep等其他linux命令,只能用window cmd的命令。在这里可以用findstr来代替grep,使用方法为
findstr/grep [keyword]
-
adb bugreport , 打印dumpsys、dumpstate、logcat的输出,也是用于分析错误
输出比较多,建议重定向到一个文件中
例如:adb bugreport > d:\bugreport.log
-
adb install , 安装应用,
adb install test.apk
安装应用,这里的xx.apk是电脑上的路径,例如:adb shell instal E:/test.apk。
windows 下如果需要安装含有中文名的 apk ,需要对 adb 进行修改,百度可以找到做出修改的adb , 支持中文命令的 apk,请自行搜索
adb -s xxxxxxxx install xx.apk
指定序列号的设备安装。注意:xxxx 就是上面提到adb devices 中device前面展示的手机序列号。
adb install -r test.apk
-r 覆盖安装,保留存储数据
adb install -t test.apk
允许安装测试包
adb install -s test.apk
将应用程序安装到sd卡上
adb install -d test.apk
允许降级覆盖安装,忽略版本号
-
adb uninstall , 卸载应用,后面跟的参数是应用的包名,请区别于 apk 文件名
adb uninstall com.baidu.BaiduMap
卸载应用
adb uninstall -k com.baidu.BaiduMap
'-k' means keep the data and cache directories , -k 选项,卸载时保存数据和缓存目录
-
adb pull , 将 Android 设备上的文件或者文件夹复制到本地
注意权限,复制系统权限的目录下的文件,需要 root ,并且一般的 Android 机 root 之后并不能使用命令去复制,而需要在手机上使用类似于 RE 的文件浏览器,先对系统的文件系统进行挂载为可读写后,才能在手机上复制移动系统文件。
adb pull sdcard/pull.txt D:\
复制 Sdcard 下的 pull.txt 文件到 D 盘:
adb pull sdcard/pull.txt D:\name.txt
如果需要重命名为 name.txt:
-
adb push , 推送本地文件至 Android 设备
adb push D:\push.txt sdcard/
推送 D 盘下的 push.txt 至 Sdcard:
-
adb root 、adb remount 只针对类似小米开发版的手机有用
可以直接已这两个命令获取 root 权限,并挂载系统文件系统为可读写状态
-
adb reboot 重启 Android 设备
adb reboot edl
重启设备,进入线刷模式。端口为9008
adb reboot bootloader
bootloader , 重启设备,进入 fastboot 模式
adb reboot recovery
recovery , 重启设备,进入 recovery 模式,经常刷机的同学比较熟悉这个模式
-
adb forward , 将 宿主机上的某个端口重定向到设备的某个端口
adb forward tcp:8080 tcp :8082
执行该命令后所有发往宿主机 8080 端口的消息、数据都会转发到 Android 设备的 8082 端口上,因此可以通过远程的方式控制 Android 设备。
-
adb connect 远程连接 Android 设备
手机、PC处于相同的网络下,手机 root ,安装应用 adbWireless ,启动应用后点击界面中间的按钮
接着运行 adb connect 192.168.28.92 , 即可通过无线的方式连接手机,缺点是速度比较慢
adb shell 命令
如何区分 adb 命令和 adb shell 命令 。简单点讲,adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令。这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下,将整个 system/bin 目录复制了出来,然后一个一个的去试。
下面介绍一些常用的 adb shell 命令 (其中pm、am 命令比较庞大)
pm命令
pm全称Package Manager , 可以用pm命令获取到一些安装在 Android 设备上得应用信息,直接运行 adb shell pm 可以获取到该命令的帮助信息
-
pm list package 列出安装在设备上的应用
adb shell pm list package
不带任何选项:列出所有的应用的包名(不知道怎么找应用的包名的同学看这里)
adb shell pm list package -s
-s:列出系统应用
adb shell pm list package -3
-3:列出第三方应用
adb shell pm list package -f
-f:列出应用包名及对应的apk名及存放位置
adb shell pm list package -i
-i:列出应用包名及其安装来源,结果显示例子:
C:\Users\mkcshwzx>adb shell pm list package -i
package:com.sohu.inputmethod.sogou installer=null
adb shell pm list package -f -3 -i baidu 命令最后增加 FILTER:过滤关键字,可以很快查找自己想要的应用
例如:查找三方应用中百度的包名、apk存放位置、安装来源:
C:\Users\mkcshwzx>adb shell pm list package -f -3 -i baidu
package:/product/preload/Baidusearch/Baidusearch.apk=com.baidu.searchbox installer=null
package:/product/preload/BaiduMap/BaiduMap.apk=com.baidu.BaiduMap installer=null
-
pm path 列出对应包名的 .apk 位置
adb shell pm path test.apk
例如:C:\Users\mkcshwzx>adb shell pm path com.baidu.searchbox
package:/product/preload/Baidusearch/Baidusearch.apk
-
pm list instrumentation 列出含有单元测试 case 的应用
后面可跟参数 -f (与 pm list package 中一样),以及 [TARGET-PACKAGE]
-
pm dump 后跟包名,列出指定应用的 dump 信息
adb shell pm dump com.baidu.searchbox
显示太多,请自行输入命令查看
-
pm install 安装应用
adb shell pm install xx.apk
这里的xx.apk是Android设备内存中的路径,必须是绝对路径。一般建议放在/sdcard/下或/data/local/tmp/路径下。
其实adb install xx.apk = adb push E:\xx.apk /data/local/tmp + adb shell pm install /data/local/tmp/xx.apk
例如:
C:\Users\mkcshwzx>adb push E:\ftp.apk /data/local/tmp
E:\ftp.apk: 1 file pushed, 0 skipped. 21.9 MB/s (2769612 bytes in 0.121s)C:\Users\mkcshwzx>adb shell pm install /data/local/tmp/ftp.apk
Success
adb shell pm install -r xx.apk
重新安装该程序,保存数据
adb shell pm install -t xx.apk
允许测试包
adb shell pm install -d xx.apk
允许降级覆盖安装
若 apk 存放于 PC 端,请使用 adb install 安装
若 apk 存放于 Android 设备上,请使用 pm install 安装
-
pm uninstall 卸载应用, 后面跟的参数都是应用的包名
adb shell pm uninstall xx.apk
例如卸载安装的AndFTP应用:C:\Users\mkcshwzx>adb shell pm uninstall lysesoft.andftpSuccess
-
pm clear 清除应用数据, 后面跟的参数都是应用的包名
例如清除AndFTP应用数据:C:\Users\mkcshwzx>adb shell pm clear lysesoft.andftp
Success
am命令
am全称Activity Manager,可以用am命去模拟各种系统的行为,直接运行 adb shell am 可以获取到该命令的帮助信息。
-
am start 启动一个 Activity,am start 后面跟的参数是应用的包名。
adb shell am start com.baidu.BaiduMap
以启动百度地图为例
adb shell am start -S com.baidu.BaiduMap
-S 先停止目标应用,再启动
adb shell am start -W com.baidu.BaiduMap
-W 等待应用完成启动
adb shell am start -a android.intent.action.VIEW -d https://www.cnblogs.com/luzhuangzhi/
启动默认浏览器打开一个网页
adb shell am start -a android.intent.action.CALL -d tel:10086
启动拨号器拨打 10086
-
am instrument 启动一个 instrumentation
单元测试或者 Robotium 会用到
-
am monitor 监控 crash 与 ANR
adb shell am monitor
例如:C:\Users\mkcshwzx>adb shell ammonitor
Monitoring activity manager... available commands:
(q)uit: finish monitoring
** Activity starting: lysesoft.andftp
-
am force-stop 后跟包名,结束应用
例如:C:\Users\mkcshwzx>adb shell am force-stop lysesoft.andftp
- am startservice 启动一个服务
- am broadcast 发送一个广播
input命令
这个命令可以向 Android 设备发送按键事件
-
input text 发送文本内容,不能发送中文
adb shell input text test123456
前提先将键盘设置为英文键盘
-
input keyevent 发送按键事件
adb shell input keyevent KEYCODE_HOME
模拟按下 Home 键 ,源码里面有定义:
public static final int KEYCODE_HOME = 3;
因此可以将命令中的 KEYCODE_HOME 替换为 3
可自行百度 keyevent 常用键列表
官方文档:https://developer.android.com/reference/android/view/KeyEvent
-
input tap 对屏幕发送一个触摸事件
adb shell input tap 500 500
点击屏幕上坐标为 500 500 的位置
-
input swipe 滑动事件
adb shell input swipe 900 500 100 500
从右往左滑动屏幕
adb shell input swipe 500 500 501 501 2000
模拟长按事件
其实就是在小的距离内,在较长的持续时间内进行滑动,最后表现出来的结果就是长按动作
screencap截图命令
adb shell screencap -p /sdcard/DCIM/screenTest.png
截屏图片,保存至 /sdcard/DCIM/ 目录下
screenrecord屏幕录制命令
adb shell screenrecord sdcard/record.mp4
执行命令后操作手机,ctrl + c 结束录制,录制视频保存至 sdcard目录下
uiautomator命令
执行 UI automation tests , 获取当前界面的控件信息
-
runtest:执行UI自动化测试
runtest是执行测试的关键命令,用来执行jar包的测试用例。
-
dump:获取控件信息
adb shell uiautomator dump
不加 [file] 选项时,默认存放在 sdcard 下
ime命令
运行 adb shell ime 可以获取到该命令的帮助信息。
adb shell ime list -s
列出设备上的输入法
C:\Users\mkcshwzx>adb shell ime list -s
com.iflytek.inputmethod/.FlyIME
com.sohu.inputmethod.sogou/.SogouIME
com.android.inputmethod.latin/.LatinIME
com.android.inputmethod.pinyin/.PinyinIME
adb shell ime set com.iflytek.inputmethod/.FlyIME
选择输入法
wm命令
获取设置设备屏幕分辨率,运行 adb shell wm 可以获取到该命令的帮助信息。
-
wm size 查看和设置显示分辨率
adb shell wm size
获取设备分辨率
adb shell wm size 720*1080
将设备分辨率设置为720*1080
adb shell wm size reset
重置分辨率
-
wm density 查看和设置显示密度
adb shell wm density
查看当前显示密度
adb shell wm density 320
将显示密度设置为320
adb shell wm density reset
重置显示密度
-
wm overscan 设置显示区域,依次为左、上、右、下
adb shell wm overscan 100,200,300,400
设置显示区域
adb shell wm overscan reset
重置显示区域
monkey 命令
请参考官方文档:https://developer.android.com/studio/test/other-testing-tools/monkey?hl=zh-cn
运行adb shell monkey -help 输出简单的使用指南。
再此补充一个引号的用途:
场景1、在 PC 端执行 monkey 命令,将信息保存至 D 盘 monkey.log,会这么写:
adb shell monkey -p com.android.settings 5000 > D:\monkey.log
场景2、在 PC 端执行 monkey 命令,将信息保存至手机的 Sdcard,需要这么写:
adb shell "monkey -p com.android.settings 5000 > sdcard/monkey.log"
如果不加上引号肯定会报错,因为不加引号是写向了 PC 端当前目录的 sdcard 目录下,而非写向手机的 Sdcard。
settings命令
在settings中,settings get用来获取信息,settings put用来写入信息,运行adb shell settings 可以获取到该命令的帮助信息。
adb shell settings get system screen_brightness_mode
获取亮度是否为自动获取
adb shell settings get system screen_brightness
获取当前亮度值
adb shell settings put system screen_brightness 200
更改亮度值(亮度值在0—255之间)
adb shell settings get system screen_off_timeout
获取屏幕休眠时间
adb shell settings put system screen_off_timeout 1800000
更改休眠时间,30分钟
adb shell settings get global auto_time
获取日期时间选项中通过网络获取时间的状态,1为允许、0为不允许
adb shell settings put global auto_time 0
更改日期状态,从1改为0
adb shell settings get global adb_enabled
获取USB调试状态,1为开启、0为关闭
adb shell settings put global adb_enabled 1
更改USB调试状态,从0改为1
adb shell settings get global wifi_on
获取Wi-Fi开关状态,1为开启、0为关闭
adb shell svc wifi enable
开启Wi-Fi
adb shell svc wifi disable
关闭Wi-Fi
adb shell settings get secure android_id
获取Android_id
dumpsys命令
-
dumpsys,默认打印出当前系统所有 service 信息
adb shell dumpsys | findstr DUMP
在dumpsys后面可加上具体的服务名需要列出当前运行的服务
adb shell dumpsys display | findstr DisplayDeviceInfo
获取设备分辨率
adb shell dumpsys battery
获取设备电池信息
adb shell dumpsys cpuinfo
获取 cpu 信息
-
dumpsys meminfo
adb shell dumpsys meminfo
获取内存信息
adb shell dumpsys meminfo com.baidu.BaiduMap
后面加上包名,获取具体应用的内存信息
-
dumpsys activity
adb shell dumpsys activity
获取 Activity 信息,加上-h可以获取帮助信息
adb shell dumpsys activity top
获取当前界面的UI信息
adb shell dumpsys activity top | findstr ACTIVITY
获取当前界面的Activity
-
dumpsys package
adb shell dumpsys package
获取 package 信息,加上-h可以获取帮助信息
adb shell dumpsys package com.baidu.BaiduMap
后面加上包名,获取某个包的信息
adb shell dumpsys notification
获取通知信息
adb shell dumpsys wifi
可以获取到当前连接的wifi名、搜索到的wifi列表、wifi强度等
adb shell dumpsys power
获取电源管理信息
adb shell dumpsys telephony.registry
获取电话信息
例如: mCallState值为0,表示待机状态、1表示来电未接听状态、2表示电话占线状态
mCallForwarding=false #是否启用呼叫转移
mDataConnectionState=2 #0:无数据连接 1:正在创建数据连接 2:已连接
mDataConnectionPossible=true #是否有数据连接
mDataConnectionApn= #APN名称 等
getprop命令
查看 Android 设备的参数信息,只运行 adb shell getprop,结果以 key : value 键值对的形式显示,如要获取某个 key 的值:
adb shell getprop ro.build.version.sdk
获取设备的 sdk 版本
adb shell getprop ro.product.model
查看设备型号
adb shell getprop ro.build.version.release
查看 Android 系统版本
adb -d shell getprop ro.product.brand
查看手机厂商名称
adb -d shell getprop ro.product.model
查看手机设备型号
adb shell getprop ro.build.version.incremental
查看版本号
其他命令
adb shell cat /sys/class/net/wlan0/address
查看手机MAC地址
adb shell cat /proc/meminfo
查看手机内存信息
adb shell df
查看手机存储信息
adb shell tcpdump -i any -p -s 0 -w /data/123.pcap
抓取网络包
adb shell ip addr show wlan0
查看wlan0 (Wi-Fi) IP地址
Linux 命令
操作你的 Android 设备,常用到的命令,只列出,不详解!
cat、cd、chmod、cp、date、df、du、grep、kill、ln、ls、lsof、netstat、ping、ps、rm、rmdir、top、touch、重定向符号 ">" ">>"、管道 "|"
拜拜ヾ(•ω•`)o