Android无障碍服务(AccessibilityService)开发框架,快速开发复杂自动化任务、远程协助、监听等
利用Android无障碍服务可以开发一些Android系统内的自动化任务,比如经典的微信自动抢红包、支付宝蚂蚁森林自动浇水、芭芭农场自动施肥等
还可以开发远程协助功能,市面上向日葵等一些远程协助功能就是利用无障碍服务和投屏权限开发的
还能开发一些拓客、引流、营销系统,抖音自动点赞评论、微博自动转发评论关注等
总之,利用Android的无障碍服务可以开发各种自动化的任务或者界面信息监听、远程协助等
按照Google官方文档继承实现的无障碍服务,对于复杂的自动化任务,不仅代码逻辑实现不清晰,后期的修改维护也会很头疼,所以在实践过程中实现了这个框架
在这个框架下开发Android无障碍服务业务可以让你的业务开发更加快速、逻辑更加健壮且容易维护。
- 步骤器重构:支持协程实现步骤事件流、步骤数据传递
- 获取屏幕图像
- 集成opencv,封装图像匹配
v2.0.0版本查看这里
- 图像识别 (✅完成)
- 图文识别
- 录屏
- js支持
- vue.js支持
- uniapp插件
- flutter插件
图像识别支付宝自动收能量 | 自动发朋友圈 | 自动滑动朋友圈 |
---|---|---|
版本v3.0.2:https://github.com/ven-coder/Assists/releases/tag/3.0.2
解压后以module方式导入assists,opencv图像识别为可选库,如果需要使用到图像识别可导入其中的assists-opcv
导入成功后在主模块build.gradle添加引用
dependencies {
...其他依赖
implementation project(':assists')
implementation project(':assists-opcv')//图像识别库,可选,按需添加
}
一定要在主模块中注册服务,不然进程被杀服务也会自动被关闭需要再次开启(小米可保持杀进程保持开启,其他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
步骤器可以帮助快速实现复杂的业务场景,比如自动发朋友圈、获取微信所有好友昵称、自动删除好友...等等都是一些逻辑较多的业务场景,步骤器可帮助快速实现。 前提: 已完成前面的配置
直接在接口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)
}
其他步骤
...
}
}
执行前请确保无障碍服务已开启
//从OpenWechat的步骤序号1开始执行,isBegin需要为true,默认false
StepManager.execute(OpenWechat::class.java, 1, isBegin = true)
图像识别模块主要是对opencv的模板匹配api和Android的屏幕图像获取进行了一层封装,下面是所封装api的使用说明
Assists.isEnableScreenCapture()
Assists.requestScreenCapture()
OpencvWrapper.getScreen()
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轴范围
返回符合条件的匹配坐标列表
扫码下载(由于加入opencv且未对abi进行过滤所以安装包有134M)
交流群 | 个人微信 |
---|---|
付费社群提供的服务:
- 完整易于阅读的开发文档(补充中...)
- Assists开发指导
- 开发疑难问答
- 基于Assists开发的抖音养号,小红书养号,支付宝能量收集,支付宝农场,无线远程控制等源码(补充中...)
- 群友互助资源对接
付费社群于2024.6.19刚刚创建,部分资料服务正在补充中,但是对于开发指导、疑难问答服务我会竭尽所能服务好大家
![](https://private-user-images.githubusercontent.com/27257149/341112843-7ae8e825-f489-46e3-96f0-ed03d12db9e8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjMzNjI1NDgsIm5iZiI6MTcyMzM2MjI0OCwicGF0aCI6Ii8yNzI1NzE0OS8zNDExMTI4NDMtN2FlOGU4MjUtZjQ4OS00NmUzLTk2ZjAtZWQwM2QxMmRiOWU4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODExVDA3NDQwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVjZjIyMGJhYTE0N2Y3NGRiZmY4ZTg4YWFhZGIzN2YxODBlM2IwMTc5ZGJmMWYwOTJmYzc0YjRiZjM0MTZiOGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.SLpl3bThPrzy20BwIOTOWoBfBJaUyFdsWlPbhho6gU4)