自动化工具 极简的 android 设备插拔监听库

williamfzc · 2018年09月29日 · 最后由 williamfzc 回复于 2018年09月29日 · 2794 次阅读

2018-11-23

使用ConnectionTracer重写设备监听层,使用 socket 替代原有的 subprocess 与 os 的方式。

介绍

在 android 测试里,一个非常经常遇到的问题就是设备的监听与管理。在 python 工具开发层面,几乎每个工具都要维护一部分代码用于设备的管理,非常麻烦。不像 java 有官方的 ddmlib 加持,python 在不同项目中的实现往往根据不同人的喜好而各不相同。虽然 google 官方也推出过官方版本的python 版本 adb,但用户并不多,文档相当不友好。

于是,为了设备管理更加简单与方便,且能够很方便地合入到现有的工具中,基于 python3 开发了whenconnect。目前,我们使用这个库进行设备监听,效果还是挺符合预期的。

使用

这个库提供一个简洁方便的方案以解决设备连接与断开时的监听工作,例如安装应用、启动应用、杀死进程,或是定制任何你希望的。它提供了设备插拔的 hook,能够自由绑定到现有的函数上。如果你希望,在设备 123456F 成功连接电脑后执行函数 A,你只需要:

from whenconnect import when_connect, start_detect


def A(device):
    print('call function A', device)


# 开始监听
start_detect()

# 事件注册
when_connect(device=['123456F'], do=A)

# 你的其他逻辑
while True:
    pass

这样,在设备连接上时就会自动执行函数 A,且将设备 ID 作为参数传递给它。当然,如果你希望监听所有设备,你可以:

when_connect(device='any', do=A)

如果要整合到现有工程中,你只需要安装好 whenconnect,再定制合适的 hook 函数并配置,就可以自由地监听设备了!

安装

pip install whenconnect

更多用法可以参考这里

项目首页:这里

有任何问题欢迎交流与反馈,还是希望这个工具能做得更好吧:)

更新

2018/9/30

新增了同步获取当前已连接设备的方法

from whenconnect import get_devices
device_list = get_devices()
共收到 4 条回复 时间 点赞

支持~ 对于 app 自动化应该有用

代码写的挺好

看了下,感觉你实现的太复杂了。另外使用上最好也能支持同步调用的方式

codeskyblue 回复

有点吧.. 后面用 ddmlib 结合写了一个就挺简洁的 但是就不是纯 python 库反而没有这个用着方便了
同步调用是指能主动获取当前设备连接状况对吧?

williamfzc 让所有人都能用 python 操作设备 中提及了此贴 11月01日 01:45
williamfzc 用 100 行 python 写一个 android 插拔监听库 中提及了此贴 11月23日 21:48
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册