Home / Blog / 移动
Tech · 移动 · iOS

ADB: Android调试工具与自动化操作工具

H by Haofly
· 2018-03-12 · updated 2022-09-06 · 258 views

ADB(Android Debug Bridge),即android的一个调试工具,主要用于开发安卓应用时调试与管理手机用,当然,非android程序员的我,主要用来自动化android设备,这一点,类似于web中的selenium。我用它实现了一个自动发任意短信的功能,网上的短信发送服务,格式都要求得太严格了,还不如自己用闲置手机发方便。

当然,其主要的功能还是这些:

  • 管理与电脑连接的android设备
  • 管理android模拟器
  • 上传/下载文件至android设备或者模拟器
Mac安装方式
brew install android-platform-tools

常用命令

设备管理

adb devices	# 列出当前连接的设备(包括连接到电脑的手机以及模拟器)
adb disconnected emulator-5554 # 断开指定设备的连接
adb shell netcfg	# 查看手机IP
adb shell settings put global http_proxy 192.168.31.133:7890 # 设置代理
adb shell settings delete global http_proxy # 删除代理

无线连接

要使用无线的方式进行管理,必须得先在手机上打开一个监听端口。方法就是先用usb线连接电脑,然后执行adb tcpip 5555命令开启端口,接下来就可以用adb connect {ip}的方式管理手机了。(对于root的手机,可以直接在手机上面的terminal类软件上执行setprop service.adb.tcp.port 5555 && stop adbd && start adbd即可,当然也有类似的软件可以直接一键开启,不过都得要root权限)

信息查看

# 打印电源相关的信息
adb shell dumpsys power	# mScreenOn=false表示当前为息屏状态或者看mHoldingDisplaySuspendBlocker

文件管理

adb push 本地路径 远程路径	# 将电脑上的文件复制到设备
adb pull 远程路径 本地路径	# 将设备上的文件复制到电脑

包管理

  • pm(package manager)
adb shell pm list packages	# 列出所有的包名
adb shell pm install -r $path/ES.apk	# 安装指定apk包
adb shell am start -n 包名	# 打开指定应用,注意这里的包名不一定能直接打开,可能得再下面的详情里面找到首页的activity component
adb shell dumpsys package 包名	# 查看指定包的详情,Activity等
adb install apk文件	# 安装指定的apk文件到设备
adb uninstall 软件包	# 卸载软件包
adb shell ps	# 查看运行中的进程

应用内部管理

  • am(activity manager)
am start -n com.estrongs.android.pop/com.estrongs.android.pop.view.FileExplorerActivity	# 

输入文字

  • **adb输入中文的问题:**adb默认是不支持中文字符输入的,不过这里有一个解决方法ADBKeyBoard,将其中的apk文件传入手机然后安装上,然后将手机输入法选择为ADBKeyBoard即可用命令来输入中文。
adb shell input text "haofly.net"	# 在安卓设备中输入文字

# 如果打开了ADBKeyBoard键盘,那么应该这样输入中英文:
adb shell am broadcast -a ADB_INPUT_TEXT --es msg '输入中文'
adb shell am broadcast -a ADB_INPUT_CODE --es code 67	# KEYCODE_DEL

模拟按键

adb shell input keyevent KEYCODE_HOME

键码对照表

数字表示常量表示功能
1KEYCODE_MENU
2KEYCODE_SOFT_RIGHT
3KEYCODE_HOMEhome键
4KEYCODE_BACKback键
5KEYCODE_CALL拨号键
6KEYCODE_ENDCALL挂机键
7至16KEYCODE_0 至 KEYCODE_9按键’0’至’9’
17KEYCODE_STAR*
18KEYCODE_POUND#
19KEYCODE_DPAD_UP方向键向上
20KEYCODE_DPAD_DOWN方向键向下
21KEYCODE_DPAD_LEFT光标左移
22KEYCODE_DPAD_RIGHT光标右移
23KEYCODE_DPAD_CENTER导航键 确定键
24KEYCODE_VOLUME_UP音量加键
25KEYCODE_VOLUME_DOWN音量减键
26KEYCODE_POWER电源键(息屏、亮屏)
27KEYCODE_CAMERA拍照键
28KEYCODE_CLEAR清除键
29-54KEYCODE_A 至 KEYCODE_Z按键’A’ 至’Z’
55KEYCODE_COMMA,
56KEYCODE_PERIOD.
57KEYCODE_ALT_LEFT
58KEYCODE_ALT_RIGHT
59KEYCODE_SHIFT_LEFT
60KEYCODE_SHIFT_RIGHT
61KEYCODE_TABTab键
62KEYCODE_SPACE空格键盘
63KEYCODE_SYM
64KEYCODE_EXPLORER资源管理器
65KEYCODE_ENVELOPE
66KEYCODE_ENTER回车
67KEYCODE_DEL删除、退格
68KEYCODE_GRAVE`
69KEYCODE_MINUS-
70KEYCODE_EQUALS=
71KEYCODE_LEFT_BRACKET[
72KEYCODE_RIGHT_BRACKET]
73KEYCODE_BACKSLASH\
74KEYCODE_SEMICOLON;
75KEYCODE_APOSTROPHE
76KEYCODE_SLASH/
77KEYCODE_AT@
78KEYCODE_NUM
79KEYCODE_HEADSETHOOK
80KEYCODE_FOCUS拍照对焦键
81KEYCODE_PLUS
82KEYCODE_MENUmenu菜单键
83KEYCODE_NOTIFICATION通知键
84KEYCODE_SEARCH搜索键
85KEYCODE_TAG_LAST
91KEYCODE_MUTE话筒静音键
92KEYCODE_PAGE_UP向上翻页
93KEYCODE_PAGE_DOWN向下翻页
95KEYCODE_SWITCH_CHARSET开关符号集(Emoji)
111KEYCODE_ESCAPEESC键
112KEYCODE_FORWARD_DEL删除键
115KEYCODE_CAPS_LOCK大写锁定
116KEYCODE_SCROLL_LOCK滚动锁定键
121KEYCODE_BREAKBreak/Pause键
122KEYCODE_MOVE_HOME光标移动到开始键
123KEYCODE_MOVE_END光标移动到结尾键
124KEYCODE_INSERT插入键
143KEYCODE_NUM_LOCK小键盘锁
164KEYCODE_VOLUME_MUTE扬声器静音键
168KEYCODE_ZOOM_IN放大键
169KEYCODE_ZOOM_OUT缩小键
187KEYCODE_APP_SWITCH应用程序切换
223KEYCODE_SLEEP睡眠键
224KEYCODE_WAKEUP唤醒键,一般没用
276KEYCODE_SOFT_SLEEP睡眠,除非持有唤醒锁
277KEYCODE_CUT剪切
278KEYCODE_COPY复制
279KEYCODE_PASTE粘贴
284KEYCODE_ALL_APPS显示所有应用程序
KEYCODE_ALT_LEFTAlt + Left
KEYCODE_ALT_RIGHTAlt + Right
KEYCODE_CTRL_LEFTControl + Left
KEYCODE_CTRL_RIGHTControl + Right
KEYCODE_SHIFT_LEFTShift + Left
KEYCODE_SHIFT_RIGHTShift + Right

模拟触摸

想要知道需要触摸的具体位置,可以打开安卓的开发者模式,然后将按键坐标打开。

adb shell input tap 100 400	# 鼠标触控(100, 400)这个点
adb shell input swipe 10 10 200 200 # 从(10,10)滑动到(200, 200)
adb shell input touchscreen swipe 100 200 100 200 2000	# 在(100, 200)这个点持续按2000ms,应用一般会根据划屏的速度来移动不一样的距离

其他操作

截图

adb shell /system/bin/screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png /tmp	# 将截图拷贝到宿主机的/tmp目录

事件

adb shell getevent	# 监听触摸事件,但是只能监听用收点击屏幕,而不能监听用模拟器的事件

ToubleShooting

  • java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission: 对于小米手机,除了打开USB 调试外,还要打开USB调试(安全设置)才允许进行操作
Haofly · 豪翔天下 · 2018-03-12

评论 · Comments

评论由 Giscus 提供,需用 GitHub 账号登录;留言会同步到这个仓库的 Discussions 里。