Android自动化无障碍服务开源库-Assists v3.0.0
Assists v3.0.0
Android无障碍服务(AccessibilityService)开发框架,快速开发复杂自动化任务、远程协助、监听等
Android无障碍服务能做什么
利用Android无障碍服务可以开发一些Android系统内的自动化任务,比如经典的微信自动抢红包、支付宝蚂蚁森林自动浇水、芭芭农场自动施肥等
还可以开发远程协助功能,市面上向日葵等一些远程协助功能就是利用无障碍服务和投屏权限开发的
还能开发一些拓客、引流、营销系统,抖音自动点赞评论、微博自动转发评论关注等
总之,利用Android的无障碍服务可以开发各种自动化的任务或者界面信息监听、远程协助等
Assists开发框架能做什么
按照Google官方文档继承实现的无障碍服务,对于复杂的自动化任务,不仅代码逻辑实现不清晰,后期的修改维护也会很头疼,所以在实践过程中实现了这个框架
在这个框架下开发Android无障碍服务业务可以让你的业务开发更加快速、逻辑更加健壮且容易维护。
v3.0.0更新日志
- 步骤器重构:支持协程、执行下一步方式改为直接指定
- 获取屏幕图像
- 集成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">
<application
android: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">
<!-- 添加代码 ↓-->
<service
android: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-data
android: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, 可操作区域最低rgb
upperScalar: Scalar, 可操作区域最高rgb
requisiteExtraRectList: 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下载
扫码下载
有问题欢迎反馈交流(微信群二维码失效可以加我拉进群)
| 交流群 | 个人微信 |
|---|---|
Android自动化无障碍服务开源库-Assists v3.0.0的更多相关文章
- 最新详解android自动化无障碍服务accessibilityservice以及高版本问题_1_如何开启获得无障碍
前言 无障碍服务accessibilityservice是什么 简单来说 无障碍服务就是一个为残障人士 尤其是视觉障碍人士提供的一个帮助服务.具体就是可以识别控件 文字 可以配合语音助手 操作和 使用 ...
- Android非常有用的开源库介绍整理
Android开源库 自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 ...
- C# 调用restful服务开源库
.NET环境下我们想调用其它开放平台的服务接口,不需要自己去实现底层,开源的库用起来会很方便 hammock http://www.cnblogs.com/shanyou/archive/2012/0 ...
- 总结一些Android好用的开源库
1.android-viewFlow https://github.com/pakerfeldt/android-viewflow 2. android-viewbadger https://gith ...
- 各种Android UI开源框架 开源库
各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...
- Android6.0运行时权限(基于RxPermission开源库)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在6.0以前的系统,都是权限一刀切的处理方式,只要用户安装,Manifest申请的权限都会被赋予,并且安装后权限也撤销不了. And ...
- 系列篇|编译可在Android上运行的依赖库(一):glib库
前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...
- Android版Ftp服务端软件
分享一款开发的Android版Ftp服务端软件,支持Android4.0及以上版本,可以实现局域网无线传输文件到手机,或者把手机上的多媒体文件分享到iPad等设备来扩展这些设备的存储空间,详情请见软件 ...
- STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例
我用的是IAR,这个貌似是MDK的,不过很有用,大家可以看一下 ;* 文件名 : startup_stm32f10x_hd.s ;* 库版本 : V3.5.0 ;* 说明: 此文件为STM32F10x ...
- Android强大的开源库与系统架构工具
后来加上的,因为太强大了,android上百个可立即使用的开源库介绍:https://github.com/Trinea/android-open-project 一款功能强大且实用的开发工具可以为开 ...
随机推荐
- WPF 警惕使用 Dispatcher.InvokeShutdown 方法退出应用 将不触发 Application.Exit 事件
这是一个比较让人困惑的一个点,我一直都以为 Dispatcher.InvokeShutdown 和 Application.Current.Shutdown 是完全等价的.但是后面发现了其实这两者还是 ...
- Java的Stream流的分页,Stream的skip和limit实现分页
1.工具类 package com.cc.testproject.utils; import com.github.pagehelper.PageInfo; import org.springfram ...
- 一分钟部署 Llama3 中文大模型,没别的,就是快
前段时间百度创始人李彦宏信誓旦旦地说开源大模型会越来越落后,闭源模型会持续领先.随后小扎同学就给了他当头一棒,向他展示了什么叫做顶级开源大模型. 美国当地时间4月18日,Meta 在官网上发布了两款开 ...
- LVS负载均衡(7)-- LVS+keepalived实现高可用
目录 1. LVS+keepalived实现高可用 1.1 实验环境说明 1.2 路由器配置 1.3 WEB服务器nginx配置 1.4 LVS+keepalived配置 1.4.1 keepaliv ...
- Wordpress小技巧(一)
★★★ Wordpress发表Post文章时,页面会出现评论框,如何禁止出现评论框.步骤如下: 一.使用wordpress的后台功能关闭文章评论依次进入"后台"-"设置 ...
- C++ 类的继承(Inheritance)
一.继承(Inheritance) C++有一个很好的性质称为inheritance(继承),就是声明一个class(derived class),把另一个或多个class(base class)的所 ...
- HTTP 连接详解
概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器.一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失.受损或失序 T ...
- 基于 OAI 部署私有的 4G EPS
目录 文章目录 目录 前言 硬件设备要求 运行平台 RF 外设 可编程 SIM 卡 UE 终端 高精度参考时钟 操作系统要求 内核要求 CPU Frequency scaling All-In-One ...
- 高效C#编程:通过智能线程池管理提升性能
前言 C#编程中,线程池(Thread Pool)是一个重要的概念,它允许开发者更有效地管理和利用系统资源.通过线程池,我们可以避免频繁地创建和销毁线程,从而减少系统开销并提高程序的响应速度和吞吐量. ...
- ASP.NET Core替换Action实际执行方法
RequestDelegate 上次,我们在<如何判断当前请求的API类型>中查看endpoints.MapControllers()实现时,最终定位到ActionEndpointFact ...