Android 开发基础 重新定义 ADB 客户端 -- fa

codeskyblue · 2018年12月17日 · 最后由 codeskyblue 回复于 2019年01月17日 · 2953 次阅读

背景

熟悉安卓测试的,很少有对 ADB 不熟悉的。然而即使 ADB 用的久了,却也仍感觉对 ADB 很陌生,你需要记住很多很多的用法,才能把 ADB 玩转。
曾有人将许许多多的命令收集起来,放在了 GitHub 上 Awesome ADB,后来又见到 Facebook 推出了fb-adb 这个项目,为了让 adb 更好用一点。无数的人前赴后继,我也想再推波助澜一下,直到 ADB 官方能够支持的好一点。于是就有了 FA 这个项目。为了能让 ADB 更好用一些。

FA 介绍

FA 的全称 FastADB,希望 ADB 能用的更顺一点。项目地址 https://github.com/codeskyblue/fa 因为是 Go 语言写的,Windows 和 Mac 都可以直接用编译出来的二进制。(目前版本 v0.1.0)

Mac 安装

目前 Mac 的安装最简单,一条命令 brew install codeskyblue/tap/fa 就安装上了。

Win 安装

需要从https://github.com/codeskyblue/fa/releases下载,安装放到 PATH 的目录下。

增加的一些方便使用的功能。如下

有多个设备的时候可以使用上下键选择

$ fa adb shell
@ select device
  > 3aff8912  Smartion
    vv12afvv  Google Nexus 5
{selected 3aff8912}
shell $

使用方法只是在原来的上面加上的 fa

截图

原来的 adb 并没有什么截图命令,所以这里提供了一个方便的方法。

$ fa screenshot -o screenshot.png
$ fa screenshot # 默认保存为 screenshot.png
$ fa screenshot -o screenshot.png --open # 保存图片,并打开

安装应用

这里为了方便,及支持本地 APK 文件的安装,也支持直接 URL 做参数。

$ fa install ApiDemos-debug.apk
$ fa install https://github.com/appium/java-client/raw/master/src/test/java/io/appium/java_client/ApiDemos-debug.apk
  • 另外加上--launch,可以在完成安装成功的时候,自动启动应用。
  • 加上--force,可以再安装前提前卸载掉应用,避免覆盖安装失败的问题。

adb devices

以前adb devices命令的命令输出,这个样子

$ adb devices
List of devices attached
3578298f        device

用其他语言解析的时候,经常要写的比较麻烦。

所以fa devices 提供的--json参数,方便其他语言解析。

$ fa devices --json
[
  {
    "serial": "3578298f",
    "status": "device"
  }
]

后续

因为现在我对 ADB 协议还不是很熟悉,现在还有一些命令离不开这个 adb.exe,估计以后慢慢完善了,就直接通过 adb 协议跟 adb server 通信了。然后会有更多的功能加进来。

附言 1  ·  2018年12月21日

新增加了 pidcat 的支持

logcat 支持 package name 过滤

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 17 条回复 时间 点赞

不错不错 不过个人想法还是觉得设计上是不是把 adb 协议通信层 跟 上面复杂的自定义功能(例如你提到的 url 直接安装、截图等等)分隔开会好一点?这样的话说不定 adb 协议层还能被抽出来用到别的项目上😀

williamfzc 回复

恩,有道理

android 8.0 上 webview 测试有个 ps 命令的小 bug,我就是通过 hack adb 的协议搞定的。adb 的协议是 socket,挺琐碎的。目前的痛点感觉是 adb server 的稳定性,经常会挂。

把常用的 ui 自动化 adb 命令化,然后就可以用 adb 做自动化了

fb-adb 的链接写错了,你写成了 fa-adb

有空可以分享下 adb 协议。

adolli 回复

fix 了

加上--uninstall,可以再安装前提前卸载掉应用,避免覆盖安装失败的问题。

。。。这里写错了吧,我看了源码,--force 才是先卸载再安装。

匿名 #10 · 2018年12月18日

哇!!!

a2021 回复

已修正

大神的新文章收藏先, 留着慢慢看

pidcat 加包名 在 Windows 上 过滤功能有问题 没有任何日志输出= =

郝斯文 回复

等待作者回复

郝斯文 回复

那你不加包名输出啥

codeskyblue 回复

已经加了包名 还是不行 我装的 python3 版本 你的事基于 python3 吗?

玛雅 回复

要不你试试直接用 pidcat https://github.com/JakeWharton/pidcat

codeskyblue 专栏文章:2018年 终总结 中提及了此贴 02月18日 10:26
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册