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

news2024/12/24 9:44:01

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

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

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

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


作者主页:[ 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

55ff830cee32c5548c3211ffa2bf9ded.png

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事件。

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

d9852de8730312c4378e777741279e66.jpeg

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学习之路汇总】

 热文推荐  

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

8ed8312f1a4bb30b71fec880aa2cf27c.jpegbd48af04cda3c16fea32de9312efab5a.jpeg882535e2bda62e4d4452f1b5b4cffcd7.jpeg

6b59c2b247cdda7671848500bc88bbdf.gif

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

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

微信沟通交流: weiyigeeker 

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

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

master@weiyigeek.top 或 关注公众号 [全栈工程师修炼指南] 留言。

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

点个【 赞 + 在 】看吧!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/610422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA PAL视频BT656解码Video Processing Subsystem去隔行工程源码 TW2867采集4路视频拼接输出 提供技术支持

目录 1、前言2、我这里已有的PAL视频解码方案3、模拟视频概述4、模拟视频颜色空间5、逐行与隔行6、BT656数据与解码BT656数据格式BT656数据解码 7、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析 8、设计思路与框架9、vivado工程详解Block Design设计SDK设计…

chatgpt赋能python:Python奇偶数求和方法详解

Python奇偶数求和方法详解 在日常的编程开发中,经常需要对数字进行分类求和,其中“奇偶数求和”更是最常见的问题之一。而Python作为一种高效、可靠的编程语言,其在求解奇偶数的优秀性能备受瞩目。接下来本篇文章将详细介绍Python奇偶数求和…

Redis为什么会这么快?Redis到底有多快?

文章目录 一、redis到底有多快?二、redis为什么这么快1、内存存储(1)虚拟存储器(虚拟内存Virtual Memory)(2)用户空间和内核空间 2、单线程(1)进程切换(上下文…

Flutter 小技巧之 3.10 全新的 MediaQuery 优化与 InheritedModel

关于 MediaQuery 我们介绍过不少,比如在之前的《MediaQuery 和 build 优化你不知道的秘密》里就介绍过,要慎重在 Scaffold 之外使用 MediaQuery.of(context) ,这是因为 MediaQuery.of 对 BuildContext 的绑定可能会导致一些不必要的性能开销&…

vue项目仿企业微信移动端(带聊天界面)

网上比较知名的网站或者软件,开源代码中都有仿其前端的。比如小米商城,京东商城,仿微信聊天页面诸如此类的。所以我潜意识觉得像那种知名公司或者软件。想找它的仿前端静态代码应该很好找。结果,当我想找仿企业微信移动端的前端静…

springboot+vue住房分配管理系统vue

本城镇保障性住房管理系统管理员,用户。管理员功能有个人中心,用户管理,房屋类型管理,房源信息管理,房源申请管理,住房分配管理,留言板管理,系统管理等。因而具有一定的实用性。 本…

c++11 标准模板(STL)(std::bitset)(四)

定义于头文件 <bitset> template< std::size_t N > class bitset; 类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作位集&#xff0c;并将它与字符串和整数相互转换。 bitset 满足可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssign…

华为OD机试真题 Java 实现【矩阵稀疏扫描】【2023 B卷 100分】,附详细解题思路

一、题目描述 如果矩阵中的许多系数都为零&#xff0c;那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大的计算节省&#xff0c;并且在许多大的实践中都会出现矩阵稀疏的问题。 给定一个矩阵&#xff0c;现在需要逐行和逐列地扫描矩阵&#xff0c;如果某一…

使用阿里云免费Serverless函数计算产品资源安装 Stable Diffusion

喜欢用 Stable Diffusion 的小伙伴注意了&#xff01;上一篇介绍了使用谷歌的 Colab 免费资源来安装这个画图神器。 但因为资源是免费的&#xff0c;高峰时期有可能会被谷歌断掉服务的连接&#xff0c;像周末这种使用高峰&#xff0c;GPU 的资源得不到保证。 没关系&#xff0c…

WPF开发txt阅读器:需求分析和文件读写

文章目录 需求分析读取文本文件保存文本文件 需求分析 尽管现在比较主流的阅读格式已经是epub, modi之类的&#xff0c;但txt的使用范围要远比前两者广泛&#xff0c;所以做一个txt阅读器还是有必要的。 但是对于书籍阅读而言&#xff0c;纯文本不包含目录信息&#xff0c;这…

chatgpt赋能python:Python奇数偶数判断:从基础语法到优化运行

Python奇数偶数判断&#xff1a;从基础语法到优化运行 Python是一门简单易学的编程语言&#xff0c;并且在科学计算、数据处理和人工智能等领域都有广泛的应用。在Python中&#xff0c;判断一个数是奇数还是偶数是一个基础问题&#xff0c;本文将介绍Python中奇数偶数的判断方…

事务与项目跟踪软件Jira

本文软件应网友 不长到一百四誓不改名 要求折腾&#xff1b; 什么是 Jira &#xff1f; Jira 是由 Atlassian 开发的跟踪和管理任务的软件开发工具&#xff0c;您可以将它用于敏捷和瀑布项目管理&#xff0c;以跟踪错误、功能和其他工作项。您还可以将 JIRA 配置为与许多服务管…

Leetcode之二分查找

1. 二分查找 二分查找的前提条件是&#xff1a;有序数组。 二分查找的递归实现&#xff1a; class Solution: def search_recur(self,nums:List[int],low:int,high:int,target:int):if low > high:return -1mid low (high - low) // 2if nums[mid] target:return midel…

chatgpt赋能python:Python在线播放——让您轻松畅览优质视频

Python在线播放——让您轻松畅览优质视频 在数字时代&#xff0c;视频已经成为了一种不可或缺的媒体形式&#xff0c;人们在在日常生活和工作中也更多地借助视频来实现信息传递和沟通。Python在线播放是当下最受欢迎的视频播放方式之一&#xff0c;相比于下载、实时流媒体等方…

Coursera自动驾驶2.3-2.4——传感器:IMU,GNSS,LiDAR

文章目录 一、3D几何和参考系1.旋转变换2.参考系 二、惯性测量单元1.陀螺仪2.加速计 三、全球导航卫星系统&#xff08;GNSS&#xff09;四、激光雷达1.激光雷达和测量模型&#xff08;1&#xff09;激光雷达概述&#xff08;2&#xff09;测量模型 2.点云3.平面拟合4.点云匹配…

Docker 基本管理

一、Docker 概述 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵守了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机”。 Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自…

rimraf : 无法加载文件 C:\Program Files\nodejs\rimraf.ps1,因为在此系统上禁止运行脚本。

问题&#xff1a; rimraf 运行 rimraf node_modules 命令报错&#xff1a;&#xff08;rimraf 前端同学可以多多了解&#xff09;rimraf : 无法加载文件 C:\Program Files\nodejs\rimraf.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/…

C#,码海拾贝(34)——求“赫申伯格矩阵”全部“特征值”的“QR方法”之C#源代码

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 矩阵类 /// 作者&#xff1a;周长发 /// 改进&#xff1a;深度混淆 /// https://blog.csdn.net/beijinghorn /// </summary> public partial class Matrix {…

chatgpt赋能python:Python基本词汇介绍

Python基本词汇介绍 Python是一种高级编程语言&#xff0c;它有着广泛的应用&#xff0c;从软件开发到数据科学。Python的语法简单易懂&#xff0c;它被广泛认为是一种易于学习和使用的编程语言。在本文中&#xff0c;我们将介绍一些Python基本词汇&#xff0c;让您能够更好地…

chatgpt赋能python:用Python统计奇偶数的方法

用Python统计奇偶数的方法 Python作为一种广泛应用于数据分析和科学计算的编程语言&#xff0c;具有许多内置函数和库&#xff0c;可以轻松地进行奇偶数的统计。这篇文章将向您展示如何使用Python统计奇偶数&#xff0c;并提供几个常见的示例。 Python奇偶数的定义 奇数是除…