这只是一篇笔记,如果想要了解详细内容,你应该看一手知识,也就是官方的文档,如果你只是想要简单了解,可以看这篇。
ADB 全称 Android Debug Bridge,即安卓调试桥,通过 ADB 能够与模拟器实例或者是连接的安卓设备进行通信,可以通过它来调试安卓应用,做应用的自动化测试,搭建云测试平台等。
- brew cask install android-platform-tools
通过 USB 连接手机,打开手机的开发者选项(允许通过 USB 调试、通过 USB 安装应用),使用 adb devices 可以查看连接的设备
输出格式为 [serialNumber] [state],serialNumber 就是序列号,state 有如下几种:
加上 -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 表示当前电量。
- adb shell getprop ro.build.version.release
还有其他的信息也可以通过 getprop 命令获取
- 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