安卓调试|一文归纳总结adb调试工具常规命令

欢迎关注「全栈工程师修炼指南」公众号

点击  下方卡片 即可关注我哟!

设为星标⭐每天带你 基础入门 到 进阶实践 再到 放弃学习

  花开堪折直须折,莫待无花空折枝 


作者主页:[ https://www.weiyigeek.top ]  

博客:[ https://blog.weiyigeek.top ]

安全运维开发从业者学习答疑交流群:请关注公众号回复【学习交流群


0x00 adb 调试工具命令

描述:通过前面学习我们知道adb(Android Debug Bridge Tools)即安卓调试桥 ,它是一个C/S架构工具,主要用于电脑端于安卓系统手机设备或者模拟器设备进行交互,特别是在某些情况下进入不了系统的时候adb就派上用场了,本章节汇总了adb相关使用命令参数。

adb 命令工具帮助信息打印:

$ adb -h

在线文档:https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/master/docs/user/adb.1.md


1.常规基础命令

start/kill-server - 启动与停止守护进程

使用示例

# adb守护进程端口默认为 5037
.\adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully

# kill掉adb守护进程
.\adb kill-tart-server

devices - 设备状态信息

使用说明
adb 会针对每个设备输出以下状态信息:

  • 序列号: adb 会创建一个字符串,用于通过端口号唯一标识设备

  • 设备状态:

    offline:设备未连接到 adb 或没有响应。
    device:设备已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。系统完成启动后,设备通常处于此运行状态。
    no device:未连接任何设备。

使用示例

# 显示已连接的设备信息
> .\adb.exe devices
List of devices attached
PWHUT20423010562        device

# 显示已连接的设备详细信息
> .\adb.exe devices -l
List of devices attached
PWHUT20423010562       device product:GLK-AL00 model:GLK_AL00 device:HWGLK transport_id:2

温馨提示 如果您在多个设备可用时发出命令但未指定目标设备,adb 会显示错误,此时需要使用-s参数指定设备序列号。

get-* - 设备相关信息

a设备的三种状态:

  • device:设备正常连接

  • offline:连接出现异常设备无响应(通常需要重连).

  • unknown:没有连接设备

使用示例

# 打印设备序列号信息
.\adb get-serialno
192.168.1.6:35399

# 打印设备信息
.\adb -s 192.168.1.6:35399 get-state
device

# 打印设备路径
.\adb -s PWHUT20423010562 get-devpath
unknown

install/uninstall 安装与卸载手机应用

# 安装应用"weiyigeekapp.apk"安装包文件放在adb工具目录下
.\adb install weiyigeekapp.apk
# 让安全执行包含 shell 元字符的命令成为可能
.\adb install Let\'sGo.apk

# 卸载手机已安装的应用,例如 "com.example.weiyigeekapp"所在位置为APP包名
.\adb uninstall com.example.weiyigeekapp

温馨提示: 如果您使用的是 Android Studio,则无需直接使用 adb 即可在模拟器或设备上安装您的应用, Android Studio 会为您执行应用的打包和安装操作。

logcat - 显示设备日志

# 显示三行日志
.\adb logcat  -t 3
  # --------- beginning of main
  # 05-14 17:05:41.097  4417  4625 W ContentSensor_AudioInfoUtil: insert info list is empty
  # 05-14 17:05:41.098   680   866 I AudioPolicyManagerCustomBase: SmartPA_LowVolume=on
  # 05-14 17:05:41.098   680   866 I APM::AudioOutputDescriptor: stop, output handle 13, profile name: primary out,  curActiveCount: 1

# 清除旧日志信息
.\adb logcat -c 

# 开始抓取日志存放在指定目录文件夹 logcat.log 中
.\adb logcat -v time >.\logcat.log 
  # 05-15 09:51:40.752 I/MQoS    ( 1599): skip-low-Level:0(0),DataDisable;use level-0
  # 05-15 09:51:40.783 I/ContentSensor_PackageUtil( 4417): pkgName : com.android.gallery3d
  # 05-15 09:51:40.789 I/CAWARENESS_31418_AbilityContext( 4600): [1684115567865] deliver {dataId=1001000011, mode=0} to 1 receivers

reboot - 重启设备

# 重启手机
adb reboot 

# 重启进入手机recovery刷机模式
adb reboot recovery

温馨提示: 进入recovery模式后,adb工具将失去对手机的控制,我们可以通过手机重启退出recovery模式。


2.网络连接命令

tcpip - 在PORT上重新启动adbd侦听TCP

使用示例

# 重设移动设备上adbd监听端口
.\adb tcpip 5555

connect/disconnet - 连接断开到设备的adbd监听

使用示例

# 客户端连接移动设备上adb监听端口
.\adb connect 192.168.31.196:5555

# 客户端断开移动设备上adbd监听端口
.\adb disconnect 192.168.31.196:5555

# 重连接离线设备
.\adb devices
  # List of devices attached
  # 192.168.1.6:35399       offline
.\adb reconnect offline
  # reconnecting 192.168.1.6:35399

pair - 与用于安全TCP/IP通信的设备配对

描述: 此命令在启动无线调试时,通过adbd用于链接到Android设备进行配对。
语法参数pair HOST[:PORT] [PAIRING CODE]

使用示例

# 连接到 192.168.1.6:36666 设备其配对码为 668899
.\adb pair 192.168.1.6:36666 668899

安卓调试|一文归纳总结adb调试工具常规命令_第1张图片

forward - 端口转发

使用示例

# 示例1.设置了主机端口 6100 到设备端口 7100 的转发
adb forward tcp:6100 tcp:7100

# 示例2.设置了主机端口 6100 到 local:logd 的转发
adb forward tcp:6100 local:logd

3.文件传输

描述: 使用 push、pull、sync 命令可以快速针对安卓手机中的文件进行上传下载同步等操作。
语法参数:

# 如需从设备中复制某个文件或目录(及其子目录),请使用以下命令
adb pull remote local

# 如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令
adb push local remote

# 同步更新all|data|odm|oem|product|system|system_ext|vendor下的数据
adb sync

示例演示

# 下载设置中/sdcard/sreen.png图片到D:\\sdcard/sreen.png
adb pull /sdcard/sreen.png D:\\sdcard\sreen.png

# 将 local 和 remote 替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。
adb push myfile.txt /sdcard/myfile.txt

扩展说明: adb shell sync 命令和adb sync命令的区别?

前者:在shell中执行,将内存缓冲区中的数据 写入到磁盘
后者:同步更新all|data|odm|oem|product|system|system_ext|vendor下的数据,如果不指定目录,将同步更新/data/和/system/

4.shell - 进行设备shell终端查看执行命令

描述: 此命令在adb中占有主要地位,其可以帮助我们操作访问Android设备的相关资源,在讲解shell之前,我们先看看 root 与 remount 两个子命令其对于安卓手机shell中访问权限是非常重要的。

语法参数:

# 通过 adb 发出设备命令,下述为命令行模式
adb [-d |-e | -s serial_number] shell shell_command

# 若需启动交互式 shell,请使用如下所示命令
adb [-d | -e | -s serial_number] shell

adb 权限提升

# 使用root权限重新启动adbd 
.\adb root
  # adbd cannot run as root in production builds,显示此行意味着手机还未root

# 以读写方式重新装载分区,如果需要重新启动,-R将自动重新启动设备。
.\adb remount
  # remount succeeded 意味着获取root成功

# 使用非root权限重新启动adbd 
.\adb unroot

温馨提示: Android 提供了大多数常见的 Unix 命令行工具, 如需查看可用工具的列表,请使用以下命令:adb shell ls /system/bin

设备相关信息

# 查看当前设备型号
./adb shell getprop ro.product.model
GLK-AL00

# 查看当前系统版本
.\adb shell getprop ro.build.version.release
10

# 获取当前CPU型号
adb shell cat /proc/cpuinfo
# 查看当前内存信息(总内存memtotal和空闲内存memfree)
adb shell cat /proc/meminfo

# 查看i2c设备节点信息
.\adb shell ls /sys/bus/i2c/drivers/

# 查看当前机型屏幕分辨率信息(下述点击屏幕点再次范围内)
.\adb shell wm size
  # Physical size: 1080x2340
# 查看当前机型dpi屏幕密度
.\adb shell wm density
  Physical density: 480
  Override density: 540
# 详细设备屏幕分辨率尺寸信息
.\adb.exe shell dumpsys window displays
WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
  Display: mDisplayId=0
    init=1080x2310 480dpi base=1080x2310 540dpi cur=1080x2310 app=1080x2090 rng=1080x978-2091x2090
    deferred=false mLayoutNeeded=false mTouchExcludeRegion=SkRegion((0,0,1080,2310))

    PS D:\Tools\platform-tools_r34.0.1-windows> .\adb.exe shell wm size
Physical size: 1080x2310

# 查看当前电池状况
.\adb shell dumpsys battery
  # Current Battery Service state:
  #   AC powered: false
  #   USB powered: true
  #   Wireless powered: false

tap/swipe - 设备点击滑动操作

描述:tap 模拟点击事件,swipe 模拟滑动事件, 可以左右滑动,可以上下滑动。

# 模拟点击(x,y)坐标位置 : shell input tap x y
.\adb shell input tap 720 1080
     
# 模拟手机滑动 : shell input swipe x1 y1 x2 y2 [time]
# 从坐标点(720,1080)用100ms滑动到(480,1080)坐标点。
.\adb shell input swipe 720 1080 480 1080 100   #  左划
.\adb shell input swipe 720 1080 920 1080 100   # →  右划
.\adb shell input swipe 720 480 480 1080 100    #  下划
.\adb shell input swipe 720 1080 480 480 100    #  上划

偷偷的告诉你哟?极客全栈修炼】微信小程序已经上线了,

可直接在微信里面直接浏览博主博客了哟,后续将上线更多有趣的小工具。


keyevent - 模拟输入点击(预定义)

描述: input keyevent操作发送手机上常用的一些按键操作,KEYCODE和对应的数值在android源码中定义如下:

# 电话键
KEYCODE_UNKNOWN         = 0
KEYCODE_SOFT_LEFT       = 1
KEYCODE_SOFT_RIGHT      = 2
KEYCODE_HOME            = 3  // 首页
KEYCODE_BACK            = 4  // 返回
KEYCODE_CALL            = 5  // 拨号
KEYCODE_ENDCALL         = 6  // 挂机(息屏)
KEYCODE_VOLUME_UP       = 24 // 音量+
KEYCODE_VOLUME_DOWN     = 25 // 音量-


# 控制键
KEYCODE_STAR            = 17
KEYCODE_POUND           = 18
KEYCODE_DPAD_UP         = 19 // 导航键向上
KEYCODE_DPAD_DOWN       = 20 // 导航键向下
KEYCODE_DPAD_LEFT       = 21 // 导航键向左
KEYCODE_DPAD_RIGHT      = 22 // 导航键向右
KEYCODE_DPAD_CENTER     = 23 // 导航键确定
KEYCODE_POWER           = 26 // 电源键
KEYCODE_CAMERA          = 27 // 拍照键
KEYCODE_CLEAR           = 28 // clear 键

# 基本 ASCII 字符按键
KEYCODE_0               = 7
KEYCODE_1               = 8
KEYCODE_2               = 9
KEYCODE_3               = 10
KEYCODE_4               = 11
KEYCODE_5               = 12
KEYCODE_6               = 13
KEYCODE_7               = 14
KEYCODE_8               = 15
KEYCODE_9               = 16
KEYCODE_A               = 29
KEYCODE_B               = 30
KEYCODE_C               = 31
KEYCODE_D               = 32
KEYCODE_E               = 33
KEYCODE_F               = 34
KEYCODE_G               = 35
KEYCODE_H               = 36
KEYCODE_I               = 37
KEYCODE_J               = 38
KEYCODE_K               = 39
KEYCODE_L               = 40
KEYCODE_M               = 41
KEYCODE_N               = 42
KEYCODE_O               = 43
KEYCODE_P               = 44
KEYCODE_Q               = 45
KEYCODE_R               = 46
KEYCODE_S               = 47
KEYCODE_T               = 48
KEYCODE_U               = 49
KEYCODE_V               = 50
KEYCODE_W               = 51
KEYCODE_X               = 52
KEYCODE_Y               = 53
KEYCODE_Z               = 54
KEYCODE_COMMA           = 55
KEYCODE_PERIOD          = 56

# 组合件
KEYCODE_ALT_LEFT        = 57
KEYCODE_ALT_RIGHT       = 58
KEYCODE_SHIFT_LEFT      = 59
KEYCODE_SHIFT_RIGHT     = 60
KEYCODE_TAB             = 61
KEYCODE_SPACE           = 62
KEYCODE_SYM             = 63
KEYCODE_EXPLORER        = 64
KEYCODE_ENVELOPE        = 65
KEYCODE_ENTER           = 66
KEYCODE_DEL             = 67
KEYCODE_GRAVE           = 68
KEYCODE_MINUS           = 69
KEYCODE_EQUALS          = 70
KEYCODE_LEFT_BRACKET    = 71
KEYCODE_RIGHT_BRACKET   = 72
KEYCODE_BACKSLASH       = 73
KEYCODE_SEMICOLON       = 74
KEYCODE_APOSTROPHE      = 75
KEYCODE_SLASH           = 76
KEYCODE_AT              = 77
KEYCODE_NUM             = 78
KEYCODE_HEADSETHOOK     = 79
KEYCODE_FOCUS           = 80   // *Camera* focus
KEYCODE_PLUS            = 81
KEYCODE_MENU            = 82
KEYCODE_NOTIFICATION    = 83
KEYCODE_SEARCH          = 84
KEYCODE_MEDIA_PLAY_PAUSE = 85
KEYCODE_MEDIA_STOP      = 86
KEYCODE_MEDIA_NEXT      = 87
KEYCODE_MEDIA_PREVIOUS  = 88
KEYCODE_MEDIA_REWIND    = 89
KEYCODE_MEDIA_FAST_FORWARD = 90
KEYCODE_MUTE            = 91 // 静音键
KEYCODE_PAGE_UP         = 92
KEYCODE_PAGE_DOWN       = 93
KEYCODE_PICTSYMBOLS     = 94   // switch symbol-sets (Emoji,Kao-moji)
KEYCODE_SWITCH_CHARSET  = 95   // switch char-sets (Kanji,Katakana)
KEYCODE_BUTTON_A        = 96
KEYCODE_BUTTON_B        = 97
KEYCODE_BUTTON_C        = 98
KEYCODE_BUTTON_X        = 99
KEYCODE_BUTTON_Y        = 100
KEYCODE_BUTTON_Z        = 101
KEYCODE_BUTTON_L1       = 102
KEYCODE_BUTTON_R1       = 103
KEYCODE_BUTTON_L2       = 104
KEYCODE_BUTTON_R2       = 105
KEYCODE_BUTTON_THUMBL   = 106
KEYCODE_BUTTON_THUMBR   = 107
KEYCODE_BUTTON_START    = 108
KEYCODE_BUTTON_SELECT   = 109
KEYCODE_BUTTON_MODE     = 110
KEYCODE_ESCAPE          = 111
KEYCODE_FORWARD_DEL     = 112
KEYCODE_CTRL_LEFT       = 113
KEYCODE_CTRL_RIGHT      = 114
KEYCODE_CAPS_LOCK       = 115
KEYCODE_SCROLL_LOCK     = 116
KEYCODE_META_LEFT       = 117
KEYCODE_META_RIGHT      = 118
KEYCODE_FUNCTION        = 119
KEYCODE_SYSRQ           = 120
KEYCODE_BREAK           = 121
KEYCODE_MOVE_HOME       = 122
KEYCODE_MOVE_END        = 123
KEYCODE_INSERT          = 124
KEYCODE_FORWARD         = 125
KEYCODE_MEDIA_PLAY      = 126
KEYCODE_MEDIA_PAUSE     = 127
KEYCODE_MEDIA_CLOSE     = 128
KEYCODE_MEDIA_EJECT     = 129
KEYCODE_MEDIA_RECORD    = 130
KEYCODE_F1              = 131
KEYCODE_F2              = 132
KEYCODE_F3              = 133
KEYCODE_F4              = 134
KEYCODE_F5              = 135
KEYCODE_F6              = 136
KEYCODE_F7              = 137
KEYCODE_F8              = 138
KEYCODE_F9              = 139
KEYCODE_F10             = 140
KEYCODE_F11             = 141
KEYCODE_F12             = 142
KEYCODE_NUM_LOCK        = 143
KEYCODE_NUMPAD_0        = 144
KEYCODE_NUMPAD_1        = 145
KEYCODE_NUMPAD_2        = 146
KEYCODE_NUMPAD_3        = 147
KEYCODE_NUMPAD_4        = 148
KEYCODE_NUMPAD_5        = 149
KEYCODE_NUMPAD_6        = 150
KEYCODE_NUMPAD_7        = 151
KEYCODE_NUMPAD_8        = 152
KEYCODE_NUMPAD_9        = 153
KEYCODE_NUMPAD_DIVIDE   = 154
KEYCODE_NUMPAD_MULTIPLY = 155
KEYCODE_NUMPAD_SUBTRACT = 156
KEYCODE_NUMPAD_ADD      = 157
KEYCODE_NUMPAD_DOT      = 158
KEYCODE_NUMPAD_COMMA    = 159
KEYCODE_NUMPAD_ENTER    = 160
KEYCODE_NUMPAD_EQUALS   = 161
KEYCODE_NUMPAD_LEFT_PAREN = 162
KEYCODE_NUMPAD_RIGHT_PAREN = 163
KEYCODE_VOLUME_MUTE     = 164
KEYCODE_INFO            = 165
KEYCODE_CHANNEL_UP      = 166
KEYCODE_CHANNEL_DOWN    = 167
KEYCODE_ZOOM_IN         = 168
KEYCODE_ZOOM_OUT        = 169
KEYCODE_TV              = 170
KEYCODE_WINDOW          = 171
KEYCODE_GUIDE           = 172
KEYCODE_DVR             = 173
KEYCODE_BOOKMARK        = 174
KEYCODE_CAPTIONS        = 175
KEYCODE_SETTINGS        = 176
KEYCODE_TV_POWER        = 177
KEYCODE_TV_INPUT        = 178
KEYCODE_STB_POWER       = 179
KEYCODE_STB_INPUT       = 180
KEYCODE_AVR_POWER       = 181
KEYCODE_AVR_INPUT       = 182
KEYCODE_PROG_RED        = 183
KEYCODE_PROG_GREEN      = 184
KEYCODE_PROG_YELLOW     = 185
KEYCODE_PROG_BLUE       = 186
KEYCODE_APP_SWITCH      = 187
KEYCODE_BUTTON_1        = 188
KEYCODE_BUTTON_2        = 189
KEYCODE_BUTTON_3        = 190
KEYCODE_BUTTON_4        = 191
KEYCODE_BUTTON_5        = 192
KEYCODE_BUTTON_6        = 193
KEYCODE_BUTTON_7        = 194
KEYCODE_BUTTON_8        = 195
KEYCODE_BUTTON_9        = 196
KEYCODE_BUTTON_10       = 197
KEYCODE_BUTTON_11       = 198
KEYCODE_BUTTON_12       = 199
KEYCODE_BUTTON_13       = 200
KEYCODE_BUTTON_14       = 201
KEYCODE_BUTTON_15       = 202
KEYCODE_BUTTON_16       = 203
KEYCODE_LANGUAGE_SWITCH = 204
KEYCODE_MANNER_MODE     = 205
KEYCODE_3D_MODE         = 206
KEYCODE_CONTACTS        = 207
KEYCODE_CALENDAR        = 208
KEYCODE_MUSIC           = 209
KEYCODE_CALCULATOR      = 210
KEYCODE_ZENKAKU_HANKAKU = 211
KEYCODE_EISU            = 212
KEYCODE_MUHENKAN        = 213
KEYCODE_HENKAN          = 214
KEYCODE_KATAKANA_HIRAGANA = 215
KEYCODE_YEN             = 216
KEYCODE_RO              = 217
KEYCODE_KANA            = 218
KEYCODE_ASSIST          = 219
KEYCODE_BRIGHTNESS_DOWN = 220
KEYCODE_BRIGHTNESS_UP   = 221
KEYCODE_MEDIA_AUDIO_TRACK = 222
KEYCODE_SLEEP           = 223
KEYCODE_WAKEUP          = 224
KEYCODE_PAIRING         = 225
KEYCODE_MEDIA_TOP_MENU  = 226
KEYCODE_11              = 227
KEYCODE_12              = 228
KEYCODE_LAST_CHANNEL    = 229
KEYCODE_TV_DATA_SERVICE = 230
KEYCODE_VOICE_ASSIST = 231
KEYCODE_TV_RADIO_SERVICE = 232
KEYCODE_TV_TELETEXT = 233
KEYCODE_TV_NUMBER_ENTRY = 234
KEYCODE_TV_TERRESTRIAL_ANALOG = 235
KEYCODE_TV_TERRESTRIAL_DIGITAL = 236
KEYCODE_TV_SATELLITE = 237
KEYCODE_TV_SATELLITE_BS = 238
KEYCODE_TV_SATELLITE_CS = 239
KEYCODE_TV_SATELLITE_SERVICE = 240
KEYCODE_TV_NETWORK = 241
KEYCODE_TV_ANTENNA_CABLE = 242
KEYCODE_TV_INPUT_HDMI_1 = 243
KEYCODE_TV_INPUT_HDMI_2 = 244
KEYCODE_TV_INPUT_HDMI_3 = 245
KEYCODE_TV_INPUT_HDMI_4 = 246
KEYCODE_TV_INPUT_COMPOSITE_1 = 247
KEYCODE_TV_INPUT_COMPOSITE_2 = 248
KEYCODE_TV_INPUT_COMPONENT_1 = 249
KEYCODE_TV_INPUT_COMPONENT_2 = 250
KEYCODE_TV_INPUT_VGA_1 = 251
KEYCODE_TV_AUDIO_DESCRIPTION = 252
KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253
KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254
KEYCODE_TV_ZOOM_MODE = 255
KEYCODE_TV_CONTENTS_MENU = 256
KEYCODE_TV_MEDIA_CONTEXT_MENU = 257
KEYCODE_TV_TIMER_PROGRAMMING = 258
KEYCODE_HELP = 259
KEYCODE_NAVIGATE_PREVIOUS = 260
KEYCODE_NAVIGATE_NEXT   = 261
KEYCODE_NAVIGATE_IN     = 262
KEYCODE_NAVIGATE_OUT    = 263
KEYCODE_MEDIA_SKIP_FORWARD = 272
KEYCODE_MEDIA_SKIP_BACKWARD = 273
KEYCODE_MEDIA_STEP_FORWARD = 274
KEYCODE_MEDIA_STEP_BACKWARD = 275

使用示例

# 方法1:
.\adb shell input keyevent KEYCODE_HOME  
.\adb shell input keyevent KEYCODE_MENU
.\adb shell input keyevent KEYCODE_BACK
.\adb shell input keyevent KEYCODE_POWER  # 关机
.\adb shell input keyevent KEYCODE_NOTIFICATION # 解锁

# 方式2
.\adb shell input keyevent 3 # 返回主页
.\adb shell input keyevent 4 # 返回上一级
.\adb shell input keyevent 6 # 挂机息屏

screencap - 屏幕截屏操作保存

# 创建截屏存放目录即截屏
.\adb.exe -s PWHUT20423010562 shell mkdir /sdcard/pic/
.\adb.exe -s PWHUT20423010562 shell /system/bin/screencap -p /sdcard/pic/weiyigeek.png
# 拉取截屏到本地
.\adb.exe -s PWHUT20423010562 pull /sdcard/pic/weiyigeek.png D:\\Study\Project\weiyigeek.png

# 在Linux中一行命令全部搞定
adb shell screencap -p | sed 's/\r$//' > screen.png

# 本地上传upload.png到/sdcard/pic/upload.png
.\adb.exe -s PWHUT20423010562 push  d:\\Tools\upload.png /sdcard/pic/upload.png

screenrecord - 录屏操作保存

描述:screenrecord是一个shell命令,支持Android4.4(API level 19)以上,视频格式为 mp4,值得注意的是不一定所有的安卓设备都有此命令。

# 1.录制屏幕(Android4.4以上可用), 按下ctrl+C停止录制
.\adb shell screenrecord /sdcard/pic/demo.mp4

# 2.指定录制时间、频分辨率大小,参数 --time-limit 默认 180 秒,--size 默认 1280*720 ,录制期间可以通过 Ctrl+C 结束录屏。
adb shell screenrecord --time-limit 20 --size 1280*720 /sdcard/screenrecord.mp4

# 3.指定视频的比特率(`增加比特率以提高视频质量或为了让文件更小而降低比特率`)以及旋转90度
adb shell screenrecord --bit-rate 6000000 --rotate /sdcard/screenrecord.mp4


# 将录制文件/sdcard/demo.mp4复制到电脑
.\adb.exe -s PWHUT20423010562 pull /sdcard/pic/demo.mp4 D:\\Study\Project\weiyigeek.mp4

pm - 调用软件包管理器显示已安装的应用

描述: 在 adb shell 中,您可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询。

# // 查看所有应用
.\adb shell pm list packages
  # package:com.ucmobile.lite
  # package:com.huawei.camera

# // 查看系统应用
.\adb shell pm list packages -s 
  # com.android.phon

# // 查看三方应用
.\adb shell pm list packages -3
  # package:com.ucmobile.lite
  # package:com.eg.android.AlipayWidget
  # package:com.sankuai.meituan

am - 调用 activity 管理器启动应用

描述: 在 adb shell 中,您可以使用 activity 管理器 (am) 工具发出命令以执行各种系统操作,如启动 activity、强行停止进程、广播 intent、修改设备屏幕属性等等。
语法参数:

start [options] intent	启动由 intent 指定的 Activity。
  # -D:启用调试功能。
  # -W:等待启动完成。
  # --start-profiler file:启动性能分析器并将结果发送至 file。
  # -P file:类似于 --start-profiler,但当应用进入空闲状态时剖析停止。
  # -R count:重复启动 activity count 次。在每次重复前,将完成顶层 activity。
  # -S:在启动 activity 前,强行停止目标应用。
  # --opengl-trace:启用 OpenGL 函数的跟踪。
  # --user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
startservice [options] intent	# 启动由 intent 指定的 Service。
kill [options] package	      # 终止与 package 关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程。
kill-all	                    # 终止所有后台进程。
force-stop package	          # 强行停止与 package 关联的所有进程。
broadcast [options] intent	  # 发出广播 intent。
instrument [options] component	# 使用 Instrumentation 实例启动监控,通常情况下,目标 component 采用 test_package/runner_class 格式。
profile start process file	 # 启动 process 的性能分析器,将结果写入 file。
profile stop process	# 停止 process 的性能分析器。
dumpheap [options] process file	# 转储 process 的堆,写入 file。
set-debug-app [options] package	#  设置要调试的应用 package。

intent 参数的规范:对于采用 intent 参数的 activity 管理器命令,您可以使用以下常用选项指定 intent , 参考地址

-a action : 指定 intent 操作,如 android.intent.action.VIEW, 只能声明一次。
-d data_uri : 指定 intent 数据 URI,如 content://contacts/people/1,只能声明一次。
-t mime_type : 指定 intent MIME 类型,如 image/png, 只能声明一次。
-c category : 指定 intent 类别,如 android.intent.category.APP_CONTACTS。
-n component : 指定带有软件包名称前缀的组件名称,以创建显式 intent, 如 com.example.app/.ExampleActivity。
-f flags : 向 setFlags() 支持的 intent 添加标志。

基础示例:

# 启动应用
.\adb shell am start -a android.intent.action.VIEW
.\adb shell am start com.huawei.camera
  # Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] pkg=com.huawei.camera }
# 启动应用使用 -n 包名/相对包名的类名
adb shell am start -n com.ucmobile.lite/.MainActivity

dpm - 调用设备政策管理器 (dpm)

描述: 为便于您开发和测试设备管理应用,请向设备政策管理器 (dpm) 工具发出命令。
语法参数:

# syntax
adb shell dpm command
# command
set-active-admin [options] component	# 将 component 设为活动管理。
set-profile-owner [options] component	# 将 component 设为活跃管理员,并将其软件包设为现有用户的个人资料所有者。
set-device-owner [options] component	# 将 component 设为活跃管理员,并将其软件包设为设备所有者。
remove-active-admin [options] component	# 停用活跃管理员,应用必须在清单中声明 android:testOnly。此命令还会移除设备所有者和个人资料所有者。
clear-freeze-period-record	# 清除设备之前设置的系统 OTA 更新冻结期记录,在开发管理冻结期的应用时,这有助于避免设备存在调度方面的限制。
force-network-logs	        # 强制系统让任何现有网络日志随时可供 DPC 检索,如果有可用的连接或 DNS 日志,DPC 会收到 onNetworkLogsAvailable() 回调。请参阅网络活动日志。
force-security-logs	        # 强制系统向 DPC 提供任何现有安全日志,如果有可用的日志,DPC 会收到 onSecurityLogsAvailable() 回调。请参阅记录企业设备活动。

cmd - 辅助测试命令

cmd package - 读取应用的 ART 配置文件
从 Android 7.0(API 级别 24)开始,Android 运行时 (ART) 会收集已安装应用的执行配置文件,这些配置文件用于优化应用性能.

# 1.要生成文本格式的配置文件信息并拉取到本地
adb shell cmd package dump-profiles package
adb pull /data/misc/profman/package.prof.txt

温馨提示:您必须拥有对文件系统的 root 权限(例如在模拟器上),才能检索执行配置文件的文件名。

cmd testharness - 重置测试设备
如果您在多个测试设备上测试应用,则在两次测试之间重置设备可能很有用, 在使用 testharness 恢复设备时,设备会自动将允许通过当前工作站调试设备的 RSA 密钥备份在一个持久性位置。

# 例如,可以移除用户数据并重置测试环境。您可以使用 testharness adb shell 命令对搭载 Android 10(API 级别 29)或更高版本的测试设备恢复出厂设置.
adb shell cmd testharness enable

getevent - 记录设备事件

语法参数:

Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device] 
-t:显示时间戳
-n:不打印换行符
-s:打印给定位的开关状态
-S:打印所有开关状态
-v:详细掩码(错误=1,dev=2,名称=4,信息=8,错误=16,位置事件=32,道具=64)
-d:显示HID描述符(如果可用)
-p:显示可能的事件(错误、开发、名称、位置事件)
-i:显示所有设备信息和可能的事件
-l:用纯文本标记事件类型和名称
-q:安静(清晰冗长的掩码)
-c:打印给定数量的事件,然后退出
-r:接收到打印速率事件

使用示例:

# 1.获取手机事件
.\adb.exe shell getevent
  # could not get driver version for /dev/input/mice, Not a typewriter
  # add device 1: /dev/input/event3
  #   name:     "fingerprint"
  # add device 2: /dev/input/event5
  #   name:     "huawei,ts_kit"
  # add device 3: /dev/input/event1
  #   name:     "hisi_volume_down_key"
  # add device 4: /dev/input/event4
  #   name:     "DA_SEPARATE_MACHINE_CARD Headset Jack"  # add device 5: /dev/input/event2
  #   name:     "ponkey_on"
  # add device 6: /dev/input/event0
  #   name:     "hisi_volume_up_key"
  # /dev/input/event5: 0003 0035 000001a2  # 按键信息
  # /dev/input/event5: 0003 0036 000000ae
  # /dev/input/event5: 0003 0039 00000000
  # /dev/input/event5: 0000 0002 00000000
# 组合示例:记录操作与重放(模拟点击),使用dd命令将我们录制的动作文件 /sdcard/event3 替换至 /dev/input/event3 ,貌似需要取得root权限。
cat /dev/input/event5> /sdcard/event5
while :;do dd if=/sdcard/event5 of=/dev/input/event5;sleep 5; done

# 2.查看当前各input设备是否注册成功
.\adb shell getevent -i
......
add device 2: /dev/input/event5
  bus:      001c
  vendor    0000
  product   0000
  version   0000
  name:     "huawei,ts_kit"
  location: ""
  id:       ""
  version:  1.0.1
  events:
    KEY (0001): 014a
    ABS (0003): 0030  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0   # 手指压力范围 ABS_MT_TOUCH_MAJOR 
                0031  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                0032  : value 0, min 0, max 100, fuzz 0, flat 0, resolution 0   # 手指按压宽度 ABS_MT_WIDTH_MAJOR 
                0033  : value 0, min 0, max 100, fuzz 0, flat 0, resolution 0
                0035  : value 0, min 0, max 1079, fuzz 0, flat 0, resolution 0  # X方向的最大触摸范围 ABS_MT_POSITION_X 
                0036  : value 0, min 0, max 2309, fuzz 0, flat 0, resolution 0  # Y方向的最大触摸范围 ABS_MT_POSITION_Y
                0039  : value 0, min 0, max 10, fuzz 0, flat 0, resolution 0    # 最大支持手指数 ABS_MT_TRACKING_ID 
.....

# 3.报点率决定了触摸的响应速度,报点率过低直接会影响到体验。
.\adb shell getevent -r /dev/input/event5
  # 0003 0035 0000026b   X 
  # 0003 0036 000003e4   Y
  # 0003 0039 00000000  按压指数
  # 0000 0002 00000000
  # 0000 0000 00000000

扩展补充: Android 手机事件名词对应及格式,假设我手指连续在(0xd8, 16f)即(216, 367)坐标附近触摸三次得到的信息如下:

  • EV_ABS ABS_MT_TRACKING_ID :当前触摸的ID它会一直累加上去的;

  • EV_ABS ABS_MT_POSITION_X :当前触摸的X的坐标

  • EV_ABS ABS_MT_POSITION_Y :当前触摸的Y的坐标

  • EV_KEY BTN_TOUCH : 标记是按下或者抬起的动作

  • EV_SYN SYN_REPORT : 标记一次上报结束

  • EV_ABS ABS_MT_TRACKING_ID : 如果这个值为 0xffffffff,那么说明当前是抬起动作,后面跟上的BTN_TOUCH要为UP;

  • EV_KEY BTN_TOUCH : 标记是按下或者抬起的动作;

  • EV_SYN SYN_REPORT : 标记一次上报结束;

参考地址: https://developer.android.com/reference/android/view/KeyEvent.html

sendevent - 发送设备事件

描述: 其作用与getevent相反,它可以往input设备中写入对应的格式值, 注意此操作需要root权限。
语法示例:

.\adb shell sendevent --help
usage: sendevent DEVICE TYPE CODE VALUE
  # Sends a Linux input event.

使用示例

# 示例 0.dev/input/event0 对应的是电源键Power事件event // 一定要找准event
# KEY_POWER,Power键 Down事件
adb shell  sendevent /dev/input/event0 1 116 1 && sendevent /dev/input/event0 0 0 0
# KEY_POWER,Power键 Up事件
adb shell  sendevent /dev/input/event0 1 116 0 && sendevent /dev/input/event0 0 0 0

# 示例1.发送 KEY_VOLUMEUP 的 down 和 up 事件:
adb shell sendevent /dev/input/event2 1 115 0  // 十进制  DOWN 事件
adb shell sendevent /dev/input/event2 0 0 0    // SYNC 上报 DOWN 事件

adb shell sendevent /dev/input/event2 1 115 1  // UP 事件
adb shell sendevent /dev/input/event2 0 0 0    // SYNC 上报 UP 事件

# 示例2.发送 KEY_VOLUMEDOWN 的 down 和 up 事件
adb shell sendevent /dev/input/event2 1 114 0  // 十进制  DOWN 事件
adb shell sendevent /dev/input/event2 0 0 0    // SYNC 上报 DOWN 事件

adb shell sendevent /dev/input/event2 1 114 1  // UP 事件
adb shell sendevent /dev/input/event2 0 0 0    // SYNC 上报 UP 事件

温馨提示: 使用 sendevent 发送事件时,一定要先有Down事件,才能有Up事件。

亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?

sqlite - 命令行执行 SQLite 命令

描述: sqlite3 可启动用于检查 SQLite 数据库的 sqlite 命令行程序(需要ROOT权限哟)。它包含用于输出表格内容的 .dump 以及用于输出现有表格的 SQL CREATE 语句的 .schema 等命令。

# 方式1.
$ adb -s PWHUT20423010562 shell
$ sqlite3 /data/top.weiyigeek.app/databases/app.db
SQLite version 3.3.12
Enter ".help" for instructions

# 方式2
$ adb -s PWHUT20423010562 pull /data/top.weiyigeek.app/databases/app.db d:\\weiygeek.db

settings - 系统设置

使用示例

# 示例1.关闭usb调试
adb shell settings put global adb_enabled 0

svc - 服务管理

示例示例

# 开启/关闭wifi
adb shell svc wifi enable|disable

温馨提示: 上述指令作者还在不断收集整理中,后续将会持续更新,请各位朋友多多关注。

本文至此完毕,更多技术文章,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/2019/4-17-73.html

如果此篇文章对你有帮助,请你将它分享给更多的人! 

af6872b29f5f2dbbde3f195a05e6cacb.gif

0e553e560b064c8c9fbf7d7f7c9a838f.png 学习书籍推荐 往期发布文章 497cab6c1c5623c6eab66a8bebf343c0.png

公众号回复【0008】获取【Ubuntu22.04安装与加固建脚本】

公众号回复【10001】获取【WinServer安全加固脚本】

公众号回复【0011】获取【k8S二进制安装部署教程】

公众号回复【0014】获取【Nginx学习之路汇总】

公众号回复【0015】获取【Jenkins学习之路汇总】

 热文推荐  

  • 开源项目 | ChatGPT-Next-Web私人ChatGPT网页应用一键免费部署

  • 开源项目 | DB-GPT 来了,兼职奶爸搞了个数据库创新AI工具!

  • 工具推荐 | 利用开源工具查看MobaXterm远程终端工具存储的Session账号密码信息

  • 企业实践 | 如何从VMWare ESXi Shell中挂载以及拷贝NTFS或者FAT32分区格式的USB闪存驱动器

  • 运维实践|从ESXi中挂载拷贝NTFS或FAT32格式物理磁盘(视频)

  • Linux基础命令行奇技淫巧

  • 运维之DNS服务器Bind9配置解析和基础示例及附带命令

欢迎长按(扫描)二维码 取更多渠道哟!

欢迎关注 【全栈工程师修炼指南】(^U^)ノ~YO

== 全栈工程师修炼指南 ==

微信沟通交流: weiyigeeker 

关注回复【学习交流群】即可加入【安全运维沟通交流小群

温馨提示: 由于作者水平有限,本章错漏缺点在所难免,希望读者批评指正,若有问题或建议请在文章末尾留下您宝贵的经验知识,或联系邮箱地址

[email protected] 或 关注公众号 [全栈工程师修炼指南] 留言。

[全栈工程师修炼指南]  关注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章,尽在博客站点,谢谢支持!

点个【 赞 + 在 】看吧!

 点击【"阅读原文"】获取更多有趣的知识!   

你可能感兴趣的:(全栈之移动APP开发学习,android,adb)