原文地址:Most complete ADB command manual
作者:larson
书接上文
文件管理
将设备中的文件复制到电脑
命令:
adb pull <file path in device> [directory on computer]
其中,电脑上目录参数可以省略,默认复制到当前目录下。
例子:
adb pull /sdcard/sr.mp4 ~/tmp/
注意:设备上的文件路径可能需要root权限才能访问,如果你的设备已经root,可以在adb shell中使用 adb shell和su命令获取root权限,然后cp /path/on/device/sdcard/filename将文件复制到sdcard中,然后 adb pull /sdcard/filename /path/on/pc。
将文件从计算机复制到设备
命令:
adb push <file path on computer> <directory in device>
例子:
adb push ~/sr.mp4 /sdcard/
注意:设备上的文件路径可能无法通过普通权限直接写入,如果你的设备已经root,可以先adb push /path/on/pc /sdcard/filename,然后adb shell,在adb shell中su获取root权限后,cp /sdcard/filename /path/on/device。
模拟键/输入
adb shell中有一个非常好用的命令叫input,通过这个命令可以做一些有趣的事情, input命令完整的帮助信息如下:
Usage: input [<source>] <command> [<arg>...]
The sources are:
mouse
keyboard
joystick
touchnavigation
touchpad
trackball
stylus
dpad
gesture
touchscreen
gamepad
The commands and default sources are:
text <string> (Default: touchscreen)
keyevent [--longpress] <key code number or name> ... (Default: keyboard)
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll <dx> <dy> (Default: trackball)
例如模拟点击: //点击屏幕上坐标点x=50 y=250的位置。
adb shell input tap 50 250
例如使用 adb shell input keyevent 命令,不同的 keycode 可以实现不同的功能,完整的 keycode 列表请参见 KeyEvent,节选如下:
keycode | Meaning |
---|---|
3 | HOME键 |
4 | Back键 |
5 | 打开拨号应用程序 |
6 | 挂断电话 |
24 | 增加音量 |
25 | 降低音量 |
26 | 电源按钮 |
27 | 拍照(需要在相机应用程序中) |
64 | 打开浏览器 |
82 | 菜单键 |
85 | 暂停/播放 |
86 | 停止播放 |
87 | 播放下一首歌曲 |
88 | 播放上一首歌曲 |
122 | 将光标移至行首或列表顶部 |
123 | 将光标移至行末或列表底部 |
126 | 继续播放 |
127 | 暂停播放 |
164 | 静音 |
176 | 打开系统设置 |
187 | 切换应用 |
207 | 打开联系人 |
208 | 打开日历 |
209 | 打开音乐 |
210 | 打开计算器 |
220 | 降低屏幕亮度 |
221 | 增加屏幕亮度 |
223 | 系统休眠 |
224 | 电量屏幕 |
231 | 打开语音助手 |
276 | 如果没有唤醒锁,则让系统休眠 |
以下是输入命令的一些使用示例。
电源按钮
db shell input keyevent 26
其效果相当于按下电源按钮。
菜单
命令:
adb shell input keyevent 82
Home键
命令:
adb shell input keyevent 3
返回键
命令:
adb shell input keyevent 4
音量控制
增加音量
adb shell input keyevent 24
降低音量
adb shell input keyevent 25
禁音
adb shell input keyevent 164
媒体控制
播放/暂停
adb shell input keyevent 85
停止播放
adb shell input keyevent 86
播放下一首歌曲
adb shell input keyevent 87
播放上一首歌曲
adb shell input keyevent 88
继续播放
adb shell input keyevent 126
暂停播放
adb shell input keyevent 127
打开/关闭屏幕
上面介绍的模拟电源按钮可以用来切换屏幕的打开和关闭,但是如果你明确想要打开或关闭屏幕,则可以使用下面的方法。
点亮屏幕
adb shell input keyevent 224
关闭屏幕
adb shell input keyevent 223
滑动来解锁
如果锁屏没有密码,并且通过滑动手势解锁,则可以通过输入滑动来解锁。
命令(参数基于型号 Nexus 5,例如向上滑动手势解锁):
adb shell input swipe 300 1000 300 500
参数300 1000 300 500分别代表起点x坐标、起点y坐标、终点x坐标、终点y坐标。
输入文本
当焦点位于文本框上时,您可以使用输入命令输入文本。
命令:
adb shell input text hello
现在文本框中出现了“hello”。
查看日志
Android系统日志分为两部分,底层Linux内核日志输出到/proc/kmsg,Android日志输出到/dev/log。
Android 日志
命令格式:
[adb] logcat [<option>] ... [<filter-spec>] ...
常见用法列举如下:
按级别过滤日志
Android 日志分为以下几种优先级(priority):
-V —— Verbose(最低,输出最多)
-D —— Debug I —— Info
-W —— Warning
-E —— Error
-F—— Fatal
-S —— Silent(最高,什么都不输出)
按一定级别过滤日志,将输出该级别及以上的日志。
例如,命令:
adb logcat *:W
将输出警告、错误、致命和静默日志。
(注意:macOS下,需要给_:W加双引号,才能让*作为标签参数,如adb logcat "_ :W",否则会报错no matches found: *:W。)
按标签和级别过滤日志
<filter-spec>
可以由多个组成<tag>[:priority]
。
例如,命令:
adb logcat ActivityManager:I MyApp:D *:S
意思是说,输出ActivityManager标签上面的Info上面的日志,输出MyApp标签上面的Debug上面的日志,以及其他标签的Silent日志(也就是屏蔽掉其他标签的日志)。
日志格式
您可以使用adb logcat -v <format>
选项来指定日志输出格式。
日志支持以下类型<format>
:
-brief
默认格式。格式为: /():
例子: D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
-process
格式为: ()
例子: D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
-tag
格式为: /:
例子:
D/HeadsetStateMachine: Disconnected process message: 10, size: 0
To
-raw
格式为:
例子:
Disconnected process message: 10, size: 0
-time
格式为: /():
例子:
08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
-threadtime
格式为: :
例子: 08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
-long
格式为: [:/]
例子: [08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine] Disconnected process message: 10, size: 0
指定的格式可以和上面的过滤同时使用。如:
adb logcat -v long ActivityManager:I *:S
清除日志
adb logcat -c
内核日志
命令:
adb shell dmesg
示例输出:
<6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs
<6>[14201.685525] PM: early resume of devices complete after 0.838 msecs
<6>[14201.753642] PM: resume of devices complete after 68.106 msecs
<4>[14201.755954] Restarting tasks ... done.
<6>[14201.771229] PM: suspend exit 2016-08-28 13:31:32.679217193 UTC
<6>[14201.872373] PM: suspend entry 2016-08-28 13:31:32.780363596 UTC
<6>[14201.872498] PM: Syncing filesystems ... done.
括号里的[14201.684016]代表内核启动以来的时间,以秒为单位。
通过内核日志我们可以做一些事情,比如测量内核的启动时间,在系统启动后找到内核日志中Freeing init memory行之前的时间。