Skip to content

NakanoSanku/minidevice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

工具包分支:

minidevice

一个对安卓设备(主要是安卓模拟器)进行基础操作的工具包-------基于adb实现

更新日志

2021.6.1

重构项目结构,统一为pep8风格

2024.1.26

移除pyminitouch依赖,解决minitouch触控方式部分设备旋转屏幕方向后无法使用的问题,加入MaaTouch触控方式,修改部分不符合命名规范的类

  • ADBtouch -> ADBTouch
  • ADBcap -> ADBCap
  • Minicap -> MiniCap
  • Minitouch -> MiniTouch
  • adbutils 依赖解除版本限制

minitouch无法在安卓13上使用,请使用MaaTouch替代

2023.12.3

屏蔽pyminitouch的日志并在MiniDevice中添加部分日志以及引入tests自动化测试Minidevice相关实例是否正常(测试不代表所有情况) 尝试修复部分bug

2023.12.2

README说明,添加MiniDevice

2023.8.10

移除opencv库的引用,让用户自行处理截图源数据bytes,以此减少库依赖(opencv,numpy库真的很大且并非所有人都需要)

requirements

adbutils,loguru,requests

安装

pip install minidevice

API文档以及使用说明

大致设计思路就是通过实现ScreenCapTouch这两个抽象基类

  1. ScreenCap
  • @abstractmethod screencap_raw 返回截图bytes数据
  • save_screencap(path) 保存截图到path
  1. Touch
  • @abstractmethod click(x,y,duration)
  • @abstractmethod swipe(points,duraiton)

整合至MiniDevice类创建对安卓设备操作的对象,引入基础操作锁,防止不合理并发导致的程序错误

MiniDevice(self, serial=None, screenshot_method= None,
                 touch_method= None, screenshot_timeout=500)

screenshot_method|touch_methodScreenCap | Touch子类或者子类实例,为None时不创建对应方法

screenshot_method|touch_method包含子类时,serial为必须

  • screenshot_raw
  • click
  • swipe

User无需关心具体实现过程,Developer直接继承基类即可添加新方法

已实现的特性

minidevice设计架构图.png

  • ScreenCap
    • MiniCap
    • ADBCap
    • DroidCast
  • Touch
    • MiniTouch
    • ADBTouch
    • MaaTouch
  • MiniDevice
    • ScreenCap
    • Touch

已知bug

  • 转发端口清理失败 (暂时无需清理,所有转发时都会判断端口是否被占用)
  • pyminitouch库使用系统路径的adb,导致需用户自行安装adb工具并添加到环境变量中
  • pyminitouch库实现存在潜在问题,主要集中在连接问题以及输入是否合法未进行检查上面

性能排序

截图

MiniCap>>DroidCast>>ADBCap

  • Minicap截取一张图片时间大概20~30ms,当然你可以通过添加参数rate,以获得更加高的速度(但这同时会拉高设备CPU占用)
  • DroidCast截图图片时间大概在50ms以内,场景越复杂,时间越长,解决方法未知
  • ADBCap耗时300ms甚至更长,稳定性未知

触控

MiniTouch>>ADBTouch

  • MiniTouch触控效率据说和Windows api几乎相同
  • ADBTouch无法模拟曲线滑动,只能点到点直线