ADB 实用笔记
这只是一篇笔记,如果想要了解详细内容,你应该看一手知识,也就是官方的文档,如果你只是想要简单了解,可以看这篇。
ADB 全称 Android Debug Bridge,即安卓调试桥,通过 ADB 能够与模拟器实例或者是连接的安卓设备进行通信,可以通过它来调试安卓应用,做应用的自动化测试,搭建云测试平台等。
安装
brew cask install android-platform-tools
通过 USB 连接手机,打开手机的开发者选项(允许通过 USB 调试、通过 USB 安装应用),使用 adb devices
可以查看连接的设备
输出格式为 [serialNumber] [state],serialNumber 就是序列号,state 有如下几种:
- offline —— 表示设备未连接成功或无响应。
- device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。
- no device —— 没有设备/模拟器连接。
加上 -l
参数可以看到具体的设备信息,使用 adb help
查看帮助
命令语法
与其他工具的命令行类似,ADB 命令有相应的 options,从上面的 adb help
中可以看到对应的全局 options ,最常用的 options 就是 -s
也就是在多设备连接的时候使用指定序列号的设备。大致命令格式可以总结为:
adb [-d|-e|-s <serialNumber>] <command>
查看应用
查看设备安装的应用
adb shell pm list packages
其中 pm
是 package manager
的缩写,abd shell
自然就是运行设备的终端 shell 的意思,因为 android
本身就是基于 unix
的。
可以通过参数来过滤,如 '-3' 为只显示第三方应用,-s
为只显示系统应用,同样也可以通过管道和 grep
来过滤,如我想知道设备中安装了哪些腾讯的应用软件:
adb shell pm list packages | grep tencent
可以看到安装的腾讯应用程序有 qq音乐(com.tencent.qqmusic)、qq邮箱(com.tencent.androidqqmail)、微信(com.tencent.mm)、手机QQ(com.tencent.mobileqq)、和平精英(com.tencent.tmgp.pubgmhd),而 com.tencent.androidqqmail 是系统应用,暂时不知道是哪个。
安装应用
可以通过 ADB 给手机安装电脑上有的 apk ,如给手机装上微博:
adb install /Users/huruji/Downloads/weibo.apk
一段时间后终端显示 success
则表明安装成功。
卸载应用
类似于上面,使用 uninstall 命令加上包名即可,如卸载微博:
adb uninstall com.sina.weibo
一段时间后终端显示 success
则表明卸载成功。
查看应用安装路径
如查看微博的安装路径
adb shell pm path com.sina.weibo
打开应用
打开应用需要知道对应的包名和 Activity 名,可以先通过命令获取启动页,如获取微信的启动页:
adb shell dumpsys window windows | grep "Current"
获取到包名和 Activity 名是 com.tencent.mm/com.tencent.mm.ui.LauncherUI
,使用 adb shell am start
命令打开
adb shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI
其中 am 是 Activity Manager
的缩写
眼睛盯着手机就可以看到手机 “自动” 打开了微信(这个不好记录演示,得自己尝试)
退出应用
如退出微信:
adb shell am force-stop com.tencent.mm
复制文件
将电脑的文件复制到设备上成为 push
,将设备上的文件复制到电脑上成为 pull
adb pull <设备里的文件路径> [电脑上的目录]
adb push <电脑上的文件路径> <设备里的目录>
模拟按键、输入
通过输入 adb shell input
可以看到对应的提示:
输入文字就是
adb shell input text
模拟按键就是
adb shell input keyevent
模拟点击就是
adb shell input tap
模拟滑动就是
adb shell input swipe
比较需要记忆的就是按键的 keycode,截取 awesome adb 的总结,还有就是 swipe 的坐标对应的是真实的屏幕分辨率,比如,我想让手机在抖音应用里自动切换视频就可以使用swipe:
adb shell input swipe 250 1000 250 100
窗口管理
窗口管理的命令是 wm
,是 window manager
的缩写
如上面提到的需要获取到屏幕的分辨率:
adb shell wm size
也可以通过这个命令修改窗口分辨率,如:
adb shell wm size 720x1280
同样可以通过 reset 还原回来
adb shell wm size reset
获取密度
adb shell wm density
同样可以修改和重置
adb shell wm density 500
adb shell wm density reset
设置内边距
adb shell wm overscan 50,100,0,200
重置
adb shell wm overscan reset
设备信息
获取手机型号
adb shell getprop ro.product.model
获取电池状况
adb shell dumpsys battery
scale
表示最大电量,level 表示当前电量。
获取 Android 版本
adb shell getprop ro.build.version.release
还有其他的信息也可以通过 getprop
命令获取
获取设备 IP 地址
adb shell ifconfig | grep Mask
设备的 IP 地址就是 10.159.100.193
截屏和录屏
截屏
截屏可以将文件存在设备里也可以导出到电脑,如导出到电脑:
adb shell screencap -p > /Users/huruji/Downloads/cap/a.png
-p
的意思就是存储为 png 格式,>
表示存储在电脑里,如果去掉 >
将路径换成设备的路径就是存储在设备里。
录屏
录屏保存在设备内,如果需要导出到电脑端可以使用之前提到的 pull
命令,录屏默认最长时间是180s:
shell screenrecord /sdcard/b.mp4
将文件导出
adb shell pull /sdcard/b.mp4
需要注意的是导出到的是当前文件夹,所以如果需要指定对应的文件夹,需要先 cd
到对应文件夹。
以上大概就是常用的操作,如果你需要通过代码控制的话就需要封装相应的包,毕竟裸着拼接字符串很难受,我大概在 npm 上搜索了一下,目前这类包相对较少,比较流行的就是 appium-adb,而这个也是服务于项目 https://github.com/appium/appium
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论