最全ADB命令手册(五)

164 阅读6分钟

原文地址: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,节选如下:

keycodeMeaning
3HOME键
4Back键
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行之前的时间。