1- # Assists
1+ # Assists v3.0.0
22Android无障碍服务(AccessibilityService)开发框架,快速开发复杂自动化任务、远程协助、监听等
33***
44## Android无障碍服务能做什么
@@ -16,50 +16,44 @@ Android无障碍服务(AccessibilityService)开发框架,快速开发复
1616
1717在这个框架下开发Android无障碍服务业务可以让你的业务开发更加快速、逻辑更加健壮且容易维护。
1818
19- ## v2.0.0更新日志
20- 1 . 整理api
21- 2 . 增加
22- - 浮窗支持拖动修改大小
23- -
24- <img src =" https://github.com/ven-coder/Assists/blob/master/graphics/scale.gif " width =150 >
25- - 根据类型查找元素
26- - 在当前元素范围下,根据类型查找元素
27- - 获取当前页面所有元素
28- - 获取指定元素下所有子元素
29- - 查找第一个可点击的父元素
30- - 拓展-获取元素在屏幕中的范围
31- - 拓展-手势点击元素所处的位置
32- - 拓展-点击元素
33- - 拓展-手势长按元素所处的位置
34- 3 . 修复
35- - 基准分辨率获取对应当前分辨率的坐标部分机型不一致问题
19+ ## v3.0.0更新日志
20+ 1 . 步骤器重构:支持协程、执行下一步方式改为直接指定下一步进行执行
21+ 2 . 获取屏幕图像
22+ 3 . 集成opencv,封装图像匹配,结合获取屏幕图像匹配当前屏幕元素
3623
3724## 功能计划
38- - 录屏
25+ - 图像识别 (✅完成)
3926- 图文识别
27+ - 录屏
4028- js支持
4129- vue.js支持
4230- uniapp插件
4331- flutter插件
4432
45- ## 快速开始
46- ### 1. 添加依赖
47- #### 1.1 将JitPack仓库添加到根目录build.gradle文件中
33+ ## Demo部分演示
34+ | 图像识别支付宝自动收能量 | 自动发朋友圈| 自动滑动朋友圈|
35+ | :-:| :-:| :-:|
36+ | <img src =" https://github.com/ven-coder/Assists/assets/27257149/8d1d09b2-e4b3-44dc-b5df-68fcdcac7a62 " width =250 /> |<img src =" https://github.com/ven-coder/Assists/assets/27257149/4713656b-a8ff-4c99-9814-a0b883ebbe64 " width =250 />|<img src =" https://github.com/ven-coder/Assists/assets/27257149/056ef46b-8076-4f90-ab5a-263ff308f8e8 " width =250 />
37+
38+ ## 使用
39+ ### 1. 添加库
40+ #### 1.1 Clone或下载源码
41+ 版本v3.0.0:https://github.com/ven-coder/Assists/releases/tag/3.0.0
4842
49- ``` groovy
50- allprojects {
51- repositories {
52- //添加JitPack仓库
53- maven { url 'https://jitpack.io' }
54- }
55- }
56- ```
5743
58- #### 1.2 添加依赖到主模块的build.gradle中,
59- ``` groovy
44+ #### 1.2 导入依赖库
45+ 解压后以module方式导入assists,opencv图像识别为可选库,如果需要使用到图像识别可导入其中的assists-opencv
46+ <img src =" https://github.com/ven-coder/Assists/assets/27257149/592dc0e1-8764-42e5-bede-2be2dfa9ccb8 " width =400/ >
47+ <br />
48+ <img src =" https://github.com/ven-coder/Assists/assets/27257149/9705e28c-8ff7-4678-bb57-7e475e5c131b " width =400/ >
49+
50+ #### 1.3 引用assists
51+ 导入成功后在主模块build.gradle添加引用
52+ ```
6053dependencies {
61- //添加依赖
62- implementation 'com.github.ven-coder:assists:2.0.0'
54+ ...其他依赖
55+ implementation project(':assists')
56+ implementation project(':assists-opencv')//图像识别库,可选,按需添加
6357}
6458```
6559
@@ -82,7 +76,7 @@ dependencies {
8276 android : supportsRtl =" true"
8377 android : theme =" @style/AppTheme"
8478 android : usesCleartextTraffic =" true" >
85- <!-- 添加以下代码 -->
79+ <!-- 添加代码 ↓ -->
8680 <service
8781 android : name =" com.ven.assist.AssistsService"
8882 android : enabled =" true"
@@ -95,38 +89,39 @@ dependencies {
9589 android : name =" android.accessibilityservice"
9690 android : resource =" @xml/assists_service" />
9791 </service >
92+ <!-- 添加代码 ↑-->
9893 </application >
9994
10095</manifest >
10196```
102- 至此,开启无障碍服务后即可使用包装的API了
97+ 至此,开启无障碍服务后即可使用包装的API,开发文档请查看: [ https://github.com/ven-coder/Assists/wiki ] ( https://github.com/ven-coder/Assists/wiki )
10398
10499## 步骤器-快速实现复杂业务
105100步骤器可以帮助快速实现复杂的业务场景,比如自动发朋友圈、获取微信所有好友昵称、自动删除好友...等等都是一些逻辑较多的业务场景,步骤器可帮助快速实现。
106101前提: 已完成前面的[ 配置] ( https://github.com/ven-coder/Assists?tab=readme-ov-file#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B )
107102### 1.继承``` StepImpl ```
108- 直接在接口` onImpl(collector: StepCollector) ` 写逻辑
103+ 直接在接口` onImpl(collector: StepCollector) ` 写步骤逻辑,每个步骤自定义步骤的序号,用于区分执行的步骤。如果重复则会以最后一个步骤为准
109104
110105``` kotlin
111106// OpenWechat为该业务场景的分类
112- class OpenWechat :StepImpl {
107+ class OpenWechat :StepImpl () {
113108 override fun onImpl (collector : StepCollector ) {
114- // 步骤1逻辑
115- collector.next(1 ) {// 1为该步骤的标识
109+ // 定义步骤序号为1的逻辑
110+ collector.next(1 ) {// 1为步骤的序号
116111 // 步骤1逻辑
117112 .. .
118- // 执行步骤2,this::class.java为当前StepImpl实现类的步骤逻辑,如果传其他的StepImpl就会执行指定的StepImpl逻辑
119- StepManager .execute( this :: class .java, 2 )
113+ // 返回下一步需要执行的序号,通过Step.get([序号]),如果需要重复该步骤可返回Step.repeat,如果返回Step.none则不执行任何步骤,相当于停止
114+ return @next Step .get( 2 ) // 将会执行步骤2逻辑
120115 }.next(2 ) {
121116 // 步骤2逻辑
122117 .. .
123- // 下一步
124- StepManager .execute( this :: class .java, 3 )
125- }.next(2 ) {
118+ // 返回下一步需要执行的序号,通过Step.get([序号])
119+ return @next Step .get( 3 )
120+ }.next(3 ) {
126121 // 步骤3逻辑
127122 .. .
128- // 下一步
129- StepManager .execute( this :: class .java, 4 )
123+ // 返回下一步需要执行的序号,通过Step.get([序号])
124+ return @next Step .get( 4 )
130125 }
131126 其他步骤
132127 .. .
@@ -139,27 +134,78 @@ class OpenWechat:StepImpl {
139134执行前请确保无障碍服务已开启
140135
141136``` kotlin
142- // 从OpenWechat的步骤1开始执行 ,isBegin需要为true,默认false
137+ // 从OpenWechat的步骤序号1开始执行 ,isBegin需要为true,默认false
143138StepManager .execute(OpenWechat ::class .java, 1 , isBegin = true )
144139```
145- 具体的使用可以下载查看demo源码
146140
147- ### 更多开发文档请查看:[ https://github.com/ven-coder/Assists/wiki ] ( https://github.com/ven-coder/Assists/wiki )
141+ ## 图像识别模块使用
142+ 图像识别模块主要是对opencv的模板匹配api和Android的屏幕图像获取进行了一层封装,下面是所封装api的使用说明
143+ ### 检查是否拥有录屏权限
144+ ``` Assists.isEnableScreenCapture() ```
145+ ### 请求录屏权限
146+ ``` Assists.requestScreenCapture() ```
147+ ### 获取屏幕图像
148+ ``` OpencvWrapper.getScreen() ```
149+ ### 通过Assets获取图像
150+ ``` OpencvWrapper.getTemplateFromAssets() ```
151+ ### 创建掩膜
152+ ```
153+ OpencvWrapper.createMask(
154+ source: Mat, //原图像
155+ lowerScalar: Scalar, 可操作区域最低rgb
156+ upperScalar: Scalar, 可操作区域最高rgb
157+ requisiteExtraRectList: List<Rect> = arrayListOf(), //不可操作区域
158+ redundantExtraRectList: List<Rect> = arrayListOf() //可操作区域,即图像匹配有效区域
159+ )
160+ ```
161+ > 添加掩膜进行模板匹配可大大提高匹配准确度,掩膜是一个黑白色的图像,白色为匹配的区域,黑色为不匹配区域,通过仅匹配关键区域提高匹配准确度
162+
163+ ### 模板匹配
164+ ``` OpencvWrapper.matchTemplate(image: Mat?, template: Mat?, mask: Mat? = null) ```
165+ > ``` image ``` 大图图像<br />
166+ > ``` template ``` 模板图像,即小图<br />
167+ > ``` mask ``` 掩膜<br />
168+ > 返回所有匹配结果,按需求进行筛选
169+
170+ ### 模板匹配获取最佳结果
171+ ``` OpencvWrapper.matchTemplateFromScreenToMinMaxLoc(image: Mat?, template: Mat?, mask: Mat? = null) ```
172+ > ``` image ``` 大图图像<br />
173+ > ``` template ``` 模板图像,即小图<br />
174+ > ``` mask ``` 掩膜<br />
175+ > 返回最佳匹配结果
176+
177+ ### 筛选匹配结果获取达到阈值的匹配结果
178+ ```
179+ OpencvWrapper.getResultWithThreshold(
180+ result: Mat,
181+ threshold: Double,
182+ ignoreX: Double = -1.0,
183+ ignoreY: Double = -1.0,
184+ )
185+ ```
186+ > ``` result ``` 匹配结果<br />
187+ > ``` threshold ``` 匹配值,范围0-1,0最低匹配值,1最高匹配值<br />
188+ > ``` ignoreX ``` 忽略的x轴范围<br />
189+ > ``` ignoreY ``` 忽略的y轴范围<br />
190+ > 返回符合条件的匹配坐标列表
191+
192+ #### 以上具体的使用最好直接查看demo源码
148193
149- ## 示例&下载
150- [ ▶ ; 示例视频] ( https://www.youtube.com/embed/kNuw9sUsDKo )
194+ #### 更多开发文档请查看:[ https://github.com/ven-coder/Assists/wiki ] ( https://github.com/ven-coder/Assists/wiki )
151195
196+ ## Demo下载
152197扫码下载
198+ <br />
199+ <img src =" https://github.com/ven-coder/Assists/assets/27257149/b79e53b0-9dab-4568-acc8-c1a915b5fcdb " width =200/ >
153200
154- <img src =" https://github.com/ven-coder/Assists/blob/master/graphics/1714263085511.jpg " width =200/ >
155-
156- [ 📥 ; 直接下载] ( https://www.pgyer.com/1zaijG )
201+ [ 📥 ; 直接下载] ( https://www.pgyer.com/103aedee063ccf042c82ccece680dc0b )
157202
158203## 有问题欢迎反馈交流(微信群二维码失效可以加我拉进群)
159204
160205| 交流群 | 个人微信 |
161206| :---------:| :-----------:|
162- | <img src =" https://github.com/ven-coder/Assists/blob/master/graphics/20240608-221247.jpg " width =200/ > | <img src =" https://github.com/ven-coder/Assists/blob/master/graphics/me.jpg " width =200/ >
207+ | <img src =" https://github.com/ven-coder/Assists/assets/27257149/0a787479-d65b-4365-9642-19c1f5e890f6 " width =200/ > | <img src =" https://github.com/ven-coder/Assists/assets/27257149/542e51d1-9f22-4381-b011-618fc0cef959 " width =200/ >
208+
163209
164210# License
165211[ GNU General Public License v3.0] ( https://github.com/ven-coder/Assists/blob/master/LICENSE )
0 commit comments