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

codeskyblue · December 17, 2018 · Last by codeskyblue replied at January 17, 2019 · 2438 hits

背景

熟悉安卓测试的,很少有对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  ·  December 21, 2018

新增加了 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才是先卸载再安装。

哇!!!

keke 回复

已修正

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

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

郝斯文 回复

等待作者回复

郝斯文 回复

那你不加包名输出啥

codeskyblue 回复

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

玛雅 回复

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

codeskyblue 专栏文章:2018年 终总结 中提及了此贴 18 Feb 10:26
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up