Android 常用 adb 命令总结

Android 常用 adb 命令总结

adb ( 全称为Android Debug Bridge)是一个C/S 架构命令行工具,起到调试桥的作用,是连接Android手机与PC端的桥梁,方便我们在电脑上对手机进行操作。adb 命令可用于执行各种设备操作,如安装和调试应用。

点击下载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 , unknown
device:设备正常连接
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、重定向符号 ">" ">>"、管道 "|"

有些可能需要使用 busybox ,另外建议 windows 下 安装一个 Cygwin,百度百科 Cygwin

 

拜拜ヾ(•ω•`)o

热门相关:最强狂兵