ADB命令总结

Author Avatar
罗炜光 7月 24, 2016
  • 在其它设备中阅读本文章

adb与shell命令来源

/frameworks/base/cmds
/system/core/toolbox

adb简介

adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个 C/S 架构的命令行工具,主要由 3 部分组成:

  • 运行在 PC 端的 Client : 可以通过它对 Android 应用进行安装、卸载及调试
  • 运行在 PC 端的 Service : 其管理客户端到 Android 设备上 adb 后台进程的连接adb 服务启动后,Windows 可以在任务管理器中找到 adb.exe 这个进程
  • 运行在 Android 设备上的 adb 后台进程

adb命令

管理多台设备

adb [-e | -d | -s <设备序列号>] <子命令>

      
-d 发送命令给usb连接的设备
-e 发送命令到模拟器设备
-s <设备序列号> 发送命令到指定设备

adb 常用命令

  • devices , 获取设备列表及设备状态

    H:\androidDemo\Test>adb devices
    List of devices attached
    192.168.56.101:5555     device
    
  • adb get-state , 获取设备的状态

    H:\androidDemo\Test>adb get-state
    device
    

    设备的状态有 3 钟,device , offline , unknown

  • device:设备正常连接
  • offline:连接出现异常,设备无响应
  • unknown:没有连接设备
  • adb kill-server , 结束 adb 服务
  • adb start-server , 启动 adb 服务
  • adb logcat , 打印 Android 的系统日志
  • adb bugreport 打印dumpsys、dumpstate、logcat的输出,也是用于分析错误

    输出比较多,建议重定向到一个文件中

    H:\androidDemo\Test>adb bugreport > E:\\a.txt
    
  • adb install [-l -r -t -s -d]< file > , 安装应用

参数 说明
-l 表示应用为受限应用
-r: 替换已经存在的应用
-t 运行安装测试包
-s 安装到SD卡中
-d 允许安装到sd卡中

安装部分软件需要对应的CPU版本才行,不然会报错误。

  • adb uninstall [-k]< package > , 卸载应用

    -k:保持data和cache下的文件

  • adb pull <remote> <local> , 将 Android 设备上的文件或者文件夹复制到本地

注意权限,复制系统权限的目录下的文件,需要 root ,并且一般的 Android 机 root 之后并不能使用命令去复制,而需要在手机上使用类似于 RE 的文件浏览器,先对系统的文件系统进行挂载为可读写后,才能在手机上复制移动系统文件,这里推荐使用小米手机的开发版本,IUNI 也是不错滴

  • adb push <local> <remote> , 推送本地文件至Android设备

    sdcard 后面的斜杠不能少

  • adb root , adb remount, 只针对类似小米开发版的手机有用,可以直接已这两个命令获取 root 权限,并挂载系统文件系统为可读写状态

  • adb reboot , 重启 Android 设备

    bootloader , 重启设备,进入 fastboot 模式,同 adb reboot-bootloader 命令
    recovery , 重启设备,进入 recovery 模式,经常刷机的同学比较熟悉这个模式

  • adb forward , 将 宿主机上的某个端口重定向到设备的某个端口

    adb forward tcp:1314 tcp :8888
    执行该命令后所有发往宿主机 1314 端口的消息、数据都会转发到 Android 设备的 8888 端口上,因此可以通过远程的方式控制 Android 设备。

  • adb connect 远程连接 Android 设备

    手机、PC处于相同的网络下,手机 root ,安装应用 adbWireless ,启动应用后点击界面中间的按钮:接着运行 adb connect 192.168.1.102 , 即可通过无线的方式连接手机,缺点是速度比较慢

  • adb get-serialno 获取SN号

  • adb get-devpath 获取device-path

  • adb backup

参数 说明
将应用的数据文件写入到指定的文件,在不指定-f输出目录的情况下,保持在当前目录的”backup.ab”
[-f < file >] 指定备份目录
``[-apk \ -noapk]`` 是否备份apk文件,默认是noapk
``[-obb \ -noobb]`` 是否备份obb数据包,默认是noobb
``[-shared \ -noshared]`` 是否备份SD卡共享内容,默认是noshared
[-all] 备份所有已安装的应用
``[-system \ -nosystem]`` 是否备份系统应用,-all默认是包括系统应用
< packages... > 备份指定的应用列表
  • adb restore 将备份文件恢复到手机中

adb shell 常用命令

文件操作命令

  • cd 进入目录
  • cat [-beflnstuv] [-B bsize] [file...] 查看文件内容
参数 描述
-b 显示行号,但会忽略空行
-e 每一行后面加一个$符号
-n 显示行号
-s 显示行号,连续空行标记为一行

例如:

H:\androidDemo\Test>adb shell cat -e -B 1  /data/misc/wifi/*.conf
  • df 列出分区列表
  • du [-H] [-L] [-P] [-a] [-d depth] [-s] [-cghikmnrx] [file...] 查询文件或目录的磁盘使用空间
  • ls [-a] [-i] [-l] [-n] [-s] 列出目录内容
    • -a:列出所有文件,包括隐藏文件
    • -i:输出文件的i节点的索引信息
    • -l :列出文件的详细信息
    • -n:用数字的GUID代替名称
    • -s:输出该文件的大小
  • grep [file...] 指定文件中搜索特定的内容,并将含有这些内容的行标准输出(windows 请使用findstr替代grep)
  • mkdir -p,-parents 创建目录
参数 说明
-p,–parents 递归创建目录
  • touch touch [-alm] [-t YYYYMMDD [.HHMMSS]] < file > 创建文件
  • rm [-f\|-i][-dPRrvWx]file 删除文件
参数 说明
-f 强制删除文件,系统不提示
-i 交互式删除,删除前提示
-d 改变硬连接数据删成0,删除该文件
-r 强制删除文件夹包括里面的文件
  • mv [-fiv]source target 移动文件(相当于剪切)
参数 说明
-f 强制移动,若文件已经存在目标则直接覆盖
-i 若目标文件已经存在,会询问是否覆盖
  • rmdir [-p] directory 删除目录
参数 说明
-p 递归删除目录,只能删除空目录
  • dd[operand...]
  • dd if =source of=targe 复制文件

其他文件命令

  • chomd [OPTION] <MODE> <FILE> 文件权限修改
    |参数|说明|
    |–|–|
    |-R|递归改变文件和目录|
    |-h|不遵循符号连接|

  • md5 file... 查询文件的MD5值

  • mount [-r] [-w] [-o options] [-t type] device directory 挂载设备信息
  • umount <path> 卸载分区挂载
  • cmp[-b][-l][-n count] file1 file2 要指出两个文件是否存在差异

其他命令

  • wm size 获取屏幕分辨率
  • dmesg 输出内核信息
  • wipe wipe system | data | all 擦除分区,恢复出厂设置
  • adb shell svc wifi [enable|disable]
    |参数|说明|
    |–|–|
    |enable|打开wifi|
    |disable|关闭wifi|
  • screenrecord <文件保存路径> 屏幕录像(只支持android4.4以上的设备,)使用ctrl+c停止录像
  • screencap -p 文件保存路径 屏幕截图

  • ping [option] ipv4 因特网包探测器,用于测试网络连接量的程序

pm

Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息,直接运行 adb shell pm 可以获取到该命令的帮助信息

  • pm list packages [参数] [过滤器] 列出安装在设备上的应用

不带任何选项:列出所有的应用的包名(不知道怎么找应用的包名的同学看这里)
adb shell pm list package

参数 描述
-s 列出系统应用
-3 列出第三方应用
-f 列出应用包名及对应的apk名及存放位置
-i 列出应用包名及其安装来源
-d 列出禁用的应用的包名
-e 列出可用的应用的包名

命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用
参数组合使用,例如,查找三方应用中知乎的包名、apk存放位置、安装来源:
[xuxu:~]$ adb shell pm list package -f -3 -i zhihu
package:/data/app/com.zhihu.android-1.apk=com.zhihu.android installer=com.xiaomi.market

  • pm path 列出对应包名的 .apk 位置

    [xuxu:~]$ adb shell pm path com.tencent.mobileqq
    package:/data/app/com.tencent.mobileqq-1.apk

  • pm list instrumentation , 列出含有单元测试 case 的应用,后面可跟参数 -f (与 pm list package 中一样),以及 [TARGET-PACKAGE]

  • pm dump , 后跟包名,列出指定应用的 dump 信息,里面有各种信息

    adb shell pm dump com.tencent.mobileqq

  • pm install [-lrtsfd] [-i PACKAGE] [PATH] , 安装应用

目标 apk 存放于 PC 端,请用 adb install 安装
目标 apk 存放于 Android 设备上,请用 pm install 安装

参数 说明
-l 锁定应用程序
-r 重新安装应用,且保留应用数据
-t 允许测试apk被安装
-i <INSTALLER_PACKAGE_NAME> 指定安装包的包名
-s 安装到sd卡
-f 安装到系统内置存储中(默认安装位置)
-d 允许降级安装(同一应用低级换高级)
-g 授予应用程序清单中列出的所有权限(只有6.0系统可用)
  • pm uninstall [options] <包名> , 卸载应用,同 adb uninstall
参数 说明
-k 卸载应用且保留数据与缓存(如果不加-k则全部删除)
  • pm clear , 清除应用数据
  • pm set-install-location , pm get-install-location , 设置应用安装位置,获取应用安装位置

[0/auto]:默认为自动
[1/internal]:默认为安装在手机内部
[2/external]:默认安装在外部存储

  • pm list permission-groups 察看已知的权限组
  • pm list permissions [参数] [权限组]
    察看所有已知的权限
参数 说明
-g 按组进行列出权限
-f 打印所有信息
-s 简短的摘要
-d 只有危险的权限列表
-u 只有权限的用户将看到列表,用户自定义权限
  • pm grant <包名> <权限名> 授予应用权限许可。必需android6.0(API级别23)以上的设备
  • pm revoke <包名> <权限名> 撤销应用权限。必需android6.0(API级别23)以上的设备

  • pm list features 列出所有硬件相关信息

  • pm list libraries :当前设备支持的libs
  • pm list users :系统上所有的users

am

  • am start [参数] <INTENT> , 启动一个 Activity,已启动系统相机应用为例
参数 说明
-D 开启调试模式
-W 等待启动完成
--start-profile <file> 开始分析器和发送结果(文件)
–sampling INTERVAL 使用样本分析 间隔:微秒,样品(使用—start-profiler)之间
-P <FILE> 应用空闲下来后,停止profile
-R COUNT 重复活动推出<统计>次。每个重复之前,活动将会结束
-S 组织目标应用开始前的活动
–opengl-trace 启用跟踪OpenGL函数
[—user <USER_ID> current] 指定哪些用户运行,如果不指定则使用当前用户
  • am instrument , 启动一个 instrumentation , 单元测试或者 Robotium 会用到
  • am monitor , 监控 crash 与 ANR

[xuxu:~]$ adb shell am monitor
Monitoring activity manager… available commands:
(q)uit: finish monitoring
** Activity starting: com.android.camera

  • am force-stop , 后跟包名,结束应用
  • adb shell am kill [参数] <process>,停止后台单个进程
  • adb shell am kill-all,停止后台所进程
  • adb shell am startservice [参数] <INTENT> , 启动一个服务
  • adb shell am stopservice [参数] <INTENT>,停止一个服务
  • adb shell am broadcast [参数] <INTENT> , 发送一个广播
Intent 说明 Am参数
component 组件名称 格式为:包名/类名 -n
action 指定Intent的执行动作,比如调用拨打电话组件 -a
data_url 表示与动作要操纵的数据 -d
category categary是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类 -c
extra 传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对 -e
mime_type MIME类型 -t
flags 各种类型的flag,很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待他 -f
package 包名 -p

input

  • input text, 发送文本内容,不能发送中文

    adb shell input text asd
    
  • input keyevent, 发送按键事件

    adb shell input keyevent 3
    

    常用的键
    1 –> “KEYCODE_MENU”
    3 –> “KEYCODE_HOME”
    4 –> “KEYCODE_BACK”

  • input tap, 对屏幕发送一个触摸事件 前一个为宽,后一个为高

    adb shell input tap 1000 800
    
  • input swipe, 滑动事件

    adb shell input swipe 1000 800 100 800
    

    如果版本不低于 4.4 , 可以模拟长按事件

    adb shell input tap 1000 800 1000 800 2000
    

dumpsys

Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息

  • adb shell dumpsys [system serbices]

包信息查询

  • adb shell dumpsys package [-h] [-f] [—checkin] [cmd]…
参数 说明
-h 打印帮助信息
-f 打印intent filter的信息
–checkin 打印出已经登记的库、系统功能、安装包
cmd 子命令(可以在-h帮助文档中查看有哪些子命令)
cmd子命令 说明
prov[iders] 获取content providers
p[ackages] 获取安装包基本信息
s[hared-user] 获取共享用户ID的应用
m[essages] 打印运行时收集的信息
v[erifiers] 打印包校验信息
version 打印数据库版本信息
write 写当前位置
<package.name> 输出给定包的信息
installs 安装会话的详细信息
l[ibraries] 列出已知的共享库
f[ibraries] 列出手机的功能
k[eysets] 列出各个包的Signing KeySets
r[esolvers] 获取intent filter
perm[issions] 获取权限
pref[erred] 打印包首选项
preferred-xml [—full] 打印包首选项,xml格式打印

activity信息查询

  • adb shell dumpsys activity [-a] [-c]…
参数 说明
-a 包括所有可用的服务器状态
-c 包括客户端状态
-p 限制输出为给定的包,例如: adb shell dumpsys activity -p com.android.browser
-h 打印帮助信息
cmd 子命令
cmd子命令 说明
a[ctivities] activity堆栈状态
r[recents] 最近activity的状态
b[rodacasts] [package_name] [histpry [-s]] 广播状态
i[ntents] [package_name] 挂起的intent状态
p[rocesses] [package_name] 进程状态
o[om] oom管理
perm[issions] url权限授权状态
prov[iders] [comp_spec…] content provider状态
provider [comp_spec] provider客户端状态
s[ervices] [comp_spec…] 服务状态
as[sociations] 跟踪应用程序的关联
service [comp_spec] 服务客户端状态
package [package_name] 给的包的所有状态
all 转储所有的activityes
top 转储栈顶的activity
write 写入所有挂起状态存储
track-associations 允许会话跟踪
untrack-associations 禁用和明确会话跟踪,命令参数可能也是一个comp_spec 转储的activity

网络信息查询

子命令 说明 命令格式
connectivity 网络连接 adb shell dumpsys connectivity
netpolicy 网络策略 adb shell dumpsys netpolicy
netstats 网络状态 adb shell dumpsys netstats
network_management 网络管理 adb shell dumpsys network_management

其他常用服务信息查询

  • adb shell dumpsys | findstr DUMP列出所有服务
  • adb shell dumpsys window w | findstr \/ | findstr name=获取当前应用的component
子命令 说明 命令格式
meminfo 内存 adb shell dumpsys meminfo
cpuinfo CPU adb shell dumpsys cpuinfo
gfxinfo 帧率 adb shell dumpsys gfxinfo
display 显示 adb shell dumpsys display
power 电源 adb shell dumpsys power
batterystats 电池状态 adb shell dumpsys batterystats
battery 电池 adb shell dumpsys battery
alarm 闹钟 adb shell dumpsys alarm
location 位置 adb shell dumpsys location
telephony.registry 电话信息 adb shell dumpsys telephony.registry
wifi wifi信息 adb shell dumpsys wifi
notification 通知信息 adb shell dumpsys notification

参考资料

Android群英传
Android常用adb命令总结
Jian_Android命令篇