ADB命令总结
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 deviceadb 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.txtadb 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-pathadb 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.apkpm list instrumentation , 列出含有单元测试 case 的应用,后面可跟参数 -f (与 pm list package 中一样),以及 [TARGET-PACKAGE]
pm dump , 后跟包名,列出指定应用的 dump 信息,里面有各种信息
adb shell pm dump com.tencent.mobileqqpm 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 asdinput keyevent, 发送按键事件adb shell input keyevent 3常用的键
1 –> “KEYCODE_MENU”
3 –> “KEYCODE_HOME”
4 –> “KEYCODE_BACK”input tap, 对屏幕发送一个触摸事件 前一个为宽,后一个为高adb shell input tap 1000 800input 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 |