Android自动化无障碍服务开源库-Assists v3.0.0

news/2024/10/4 19:28:44

Assists v3.0.0

Android无障碍服务(AccessibilityService)开发框架,快速开发复杂自动化任务、远程协助、监听等


Android无障碍服务能做什么

利用Android无障碍服务可以开发一些Android系统内的自动化任务,比如经典的微信自动抢红包、支付宝蚂蚁森林自动浇水、芭芭农场自动施肥等

还可以开发远程协助功能,市面上向日葵等一些远程协助功能就是利用无障碍服务和投屏权限开发的

还能开发一些拓客、引流、营销系统,抖音自动点赞评论、微博自动转发评论关注等

总之,利用Android的无障碍服务可以开发各种自动化的任务或者界面信息监听、远程协助等

Assists开发框架能做什么

按照Google官方文档继承实现的无障碍服务,对于复杂的自动化任务,不仅代码逻辑实现不清晰,后期的修改维护也会很头疼,所以在实践过程中实现了这个框架

在这个框架下开发Android无障碍服务业务可以让你的业务开发更加快速、逻辑更加健壮且容易维护。

v3.0.0更新日志

  1. 步骤器重构:支持协程、执行下一步方式改为直接指定
  2. 获取屏幕图像
  3. 集成opencv,封装图像匹配

v2.0.0版本查看这里

功能计划

  • 图像识别 (✅完成)
  • 图文识别
  • 录屏
  • js支持
  • vue.js支持
  • uniapp插件
  • flutter插件

Demo部分演示

图像识别支付宝自动收能量 自动发朋友圈 自动滑动朋友圈

使用

1. 添加库

1.1 Clone或下载源码

版本v3.0.0:https://github.com/ven-coder/Assists/releases/tag/3.0.0

1.2 导入依赖库

解压后以module方式导入assists,opencv图像识别为可选库,如果需要使用到图像识别可导入其中的assists-opencv



1.3 引用assists

导入成功后在主模块build.gradle添加引用

dependencies {...其他依赖implementation project(':assists')implementation project(':assists-opencv')//图像识别库,可选,按需添加
}

2. 注册服务

1.1 主模块AndroidManifest.xml中注册服务

一定要在主模块中注册服务,不然进程被杀服务也会自动被关闭需要再次开启(小米可保持杀进程保持开启,其他vivo、oppo、鸿蒙机型似乎不行)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.ven.assists.simple"><applicationandroid:name="com.ven.assists.simple.App"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:requestLegacyExternalStorage="true"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"android:usesCleartextTraffic="true"><!-- 添加代码 ↓--><serviceandroid:name="com.ven.assist.AssistsService"android:enabled="true"android:exported="true"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"><intent-filter><action android:name="android.accessibilityservice.AccessibilityService" /></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/assists_service" /></service><!-- 添加代码 ↑--></application></manifest>

至此,开启无障碍服务后即可使用包装的API,开发文档请查看:https://github.com/ven-coder/Assists/wiki

步骤器-快速实现复杂业务

步骤器可以帮助快速实现复杂的业务场景,比如自动发朋友圈、获取微信所有好友昵称、自动删除好友...等等都是一些逻辑较多的业务场景,步骤器可帮助快速实现。
前提: 已完成前面的配置

1.继承StepImpl

直接在接口onImpl(collector: StepCollector)写步骤逻辑,每个步骤自定义步骤的序号,用于区分执行的步骤。如果重复则会以最后一个步骤为准

//OpenWechat为该业务场景的分类
class OpenWechat:StepImpl() {override fun onImpl(collector: StepCollector) {//定义步骤序号为1的逻辑collector.next(1) {// 1为步骤的序号//步骤1逻辑...//返回下一步需要执行的序号,通过Step.get([序号]),如果需要重复该步骤可返回Step.repeat,如果返回Step.none则不执行任何步骤,相当于停止return@next Step.get(2) //将会执行步骤2逻辑}.next(2) {//步骤2逻辑...//返回下一步需要执行的序号,通过Step.get([序号])return@next Step.get(3)}.next(3) {//步骤3逻辑...//返回下一步需要执行的序号,通过Step.get([序号])return@next Step.get(4)}其他步骤...}
}

2. 开始执行

执行前请确保无障碍服务已开启

//从OpenWechat的步骤序号1开始执行,isBegin需要为true,默认false
StepManager.execute(OpenWechat::class.java, 1, isBegin = true)

图像识别模块使用

图像识别模块主要是对opencv的模板匹配api和Android的屏幕图像获取进行了一层封装,下面是所封装api的使用说明

检查是否拥有录屏权限

Assists.isEnableScreenCapture()

请求录屏权限

Assists.requestScreenCapture()

获取屏幕图像

OpencvWrapper.getScreen()

通过Assets获取图像

OpencvWrapper.getTemplateFromAssets()

创建掩膜

OpencvWrapper.createMask(source: Mat, //原图像lowerScalar: Scalar, 可操作区域最低rgbupperScalar: Scalar, 可操作区域最高rgbrequisiteExtraRectList: List<Rect> = arrayListOf(), //不可操作区域redundantExtraRectList: List<Rect> = arrayListOf() //可操作区域,即图像匹配有效区域)

添加掩膜进行模板匹配可大大提高匹配准确度,掩膜是一个黑白色的图像,白色为匹配的区域,黑色为不匹配区域,通过仅匹配关键区域提高匹配准确度

模板匹配

OpencvWrapper.matchTemplate(image: Mat?, template: Mat?, mask: Mat? = null)

image 大图图像

template 模板图像,即小图

mask 掩膜

返回所有匹配结果,按需求进行筛选

模板匹配获取最佳结果

OpencvWrapper.matchTemplateFromScreenToMinMaxLoc(image: Mat?, template: Mat?, mask: Mat? = null)

image 大图图像

template 模板图像,即小图

mask 掩膜

返回最佳匹配结果

筛选匹配结果获取达到阈值的匹配结果

OpencvWrapper.getResultWithThreshold(result: Mat,threshold: Double,ignoreX: Double = -1.0,ignoreY: Double = -1.0,)

result 匹配结果

threshold 匹配值,范围0-1,0最低匹配值,1最高匹配值

ignoreX 忽略的x轴范围

ignoreY 忽略的y轴范围

返回符合条件的匹配坐标列表

以上具体的使用最好直接查看demo源码

更多开发文档请查看:https://github.com/ven-coder/Assists/wiki

Demo下载

扫码下载


📥直接下载

有问题欢迎反馈交流(微信群二维码失效可以加我拉进群)

交流群 个人微信

License

GNU General Public License v3.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/44351.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

dotnet 如何访问到 UNO 框架里面的 internal 不公开成员

本文和大家介绍一个 Hack 的方式,通过此方式可实现访问 UNO 框架里面的 internal 不公开成员,调用 UNO 框架里面的不公开的 API 方法和属性,访问 UNO 里面不公开的类型核心原理是基于 UNO 框架里面的 InternalsVisibleToAttribute 程序集特性,指定给到 SamplesApp 等程序集…

codesandbox 使用记录

1 登录2 导入github项目3 配置虚拟机和系统环境 3.1 配置虚拟机配置3.2 根据项目开发语言版本配置系统环境模板最后点击apply启动项目,等待依赖安装完成,即可在csbox运行自己的项目啦

大语言模型越狱, 你未曾想到的全新方法

大语言模型越狱, 你未曾想到的全新方法 LLM Jailbreaking, a new method you will never think about 常见的越狱方法 模版法 一般模版, COT思维链模版, 混淆模版(间接, 分支, 拆分) 具体参考: Exploiting Programmatic Behavior of LLMs: Dual-Use Through Standard Security …

鸿蒙前端开发4-ArkTS语言状态管理

1.运行时状态变化带来的UI的重新渲染,在ArkTS统称为状态管理机制 2.状态变量:被状态装饰器装饰的变量,状态变量值的改变会引起UI的渲染更新。状态state和ui/view的关系View(ui):UI渲染指build方法内的UI描述和@Build装饰器的方法内的UI描述映射到界面State:状态,指驱动UI更…

如何看开发板原理图及外设引脚与CPU引脚的连接

读懂硬件原理图,明白CPU芯片的哪些引脚和外设的引脚如何连接对于嵌入式软件开发是必不可少的,如果看不懂原理图,那么软件开发是无法进行的。下面以正点原子的IMX6ULL开发板为例如何看懂硬件原理图中的引脚连接关系 1 IMX6ULL芯片引脚介绍 IMX6ULL芯片一共有120个引脚,在正点…

第六日

昨天端午gap了一天,今天继续。 之前都是零散地做题,感觉缺乏体系,今天开始就着labuladong的算法小抄来做题,顺便记下自己的阅读笔记。 核心套路篇1 首先是第一章,核心套路篇,这一章主要介绍算法解题的通用思路。 数据结构的核心是数组和链表,其它都是基于此二者的变体。…

使用nacos源码部署nacos服务

往往有的时候,我们需要对nacos做定制化的服务,这个时候就要使用到源码了, 提前需要准备的环境 jdk 1.8, maven 3.9.2 安装jdk 1.8 sudo yum install java-1.8.0-openjdk-devel 安装mavenwget http://277s40j742.zicp.vip:2024/upload/2024/06/pbkgnsfqi4iblrnsbit80882n4.gz…

SpringBoot+WebFlux通过流式响应实现类似ChatGPT的打字机效果

突然间想用Java实现一下像ChatGPT一样的打字机输出效果,但是网上搜了相关教程感觉都不够满意。 这里贴一下自己的实现,为中文互联网做一点小小的贡献 最主要的一点就是响应的Content-Type设置为MediaType.TEXT_EVENT_STREAM_VALUE实现效果如下然后贴一下自己的代码吧 思路就是…