欢迎关注「全栈工程师修炼指南」公众号
点击 👇 下方卡片 即可关注我哟!
设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!
“ 花开堪折直须折,莫待无花空折枝。 ”
作者主页:[ 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
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
如果此篇文章对你有帮助,请你将它分享给更多的人!
学习书籍推荐 往期发布文章
公众号回复【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闪存驱动器
Linux基础命令行奇技淫巧
运维之DNS服务器Bind9配置解析和基础示例及附带命令
欢迎长按(扫描)二维码 获取更多渠道哟!
欢迎关注 【全栈工程师修炼指南】(^U^)ノ~YO
== 全栈工程师修炼指南 ==
微信沟通交流: weiyigeeker
关注回复【学习交流群】即可加入【安全运维沟通交流小群】
温馨提示: 由于作者水平有限,本章错漏缺点在所难免,希望读者批评指正,若有问题或建议请在文章末尾留下您宝贵的经验知识,或联系邮箱地址
master@weiyigeek.top 或 关注公众号 [全栈工程师修炼指南] 留言。
[全栈工程师修炼指南] 关注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章,尽在博客站点,谢谢支持!
点个【 赞 + 在 】看吧!
点击【"阅读原文"】获取更多有趣的知识!