# Assists **Repository Path**: github-rocks/Assists ## Basic Information - **Project Name**: Assists - **Description**: 🔥Android无障碍服务(AccessibilityService)开发框架,Android自动化脚本框架,快速开发复杂自动化任务、远程协助、监听等 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-02 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **利用Android无障碍服务(AccessibilityService)能做什么** 可以开发各种各样的自动化脚本程序以及协助脚本,比如: 1. 微信自动抢红包 2. 微信自动接听电话 3. 支付宝蚂蚁森林自动浇水 4. 支付宝芭芭农场自动施肥、自动收集能量... 5. 各种平台的拓客、引流、营销系统 6. 远程控制 # Assists作用 基于Android无障碍服务(AccessibilityService)封装的框架 1. 简化自动化脚本开发 2. 为自动化脚本提供各种增强能力 3. 提高脚本易维护性 4. 支持html+js/vue开发自动化脚本 # 主要能力 1. 易于使用的无障碍服务API 2. 浮窗管理器:易于实现及管理浮窗 3. 步骤器:为快速实现、可复用、易维护的自动化步骤提供框架及管理 4. 配套屏幕管理:快速生成输出屏幕截图、元素截图 5. 屏幕管理结合opencv:便于屏幕内容识别为自动化提供服务 6. 封装webview接口支持html+js/vue开发自动化脚本 # 一些示例 | 基础示例 | 进阶示例 | 高级示例 | 图片截取 | | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | | | | | | | 自动收能量 | 自动发朋友圈 | 自动滑动朋友圈 | 无障碍服务开启引导 | | :---------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------: | | | | | | | 防止下拉通知栏 | 通知/Toast监听 | 自动接听微信电话 | 窗口缩放&拖动 | | | | | | ##### 更多示例可以直接下载demo查看 [📥直接下载](https://www.pgyer.com/1zaijG) # 🎉新增JS支持库 新增支持通过Web端实现Android平台自动化脚本的JS库:**[assistsx-js](https://github.com/ven-coder/assistsx-js)** # 🚀 快速开始 ### 1. 导入依赖 #### 1.1 项目根目录build.gradle添加 ``` allprojects { repositories { //添加jitpack仓库 maven { url 'https://jitpack.io' } } } ``` #### 1.2 主模块build.gradle添加 最新版本:[![](https://jitpack.io/v/ven-coder/Assists.svg)](https://jitpack.io/#ven-coder/Assists) ``` dependencies { //按需添加 //基础库(必须) implementation "com.github.ven-coder.Assists:assists-base:最新版本" //屏幕录制相关(可选) implementation "com.github.ven-coder.Assists:assists-mp:最新版本" //opencv相关(可选) implementation "com.github.ven-coder.Assists:assists-opcv:最新版本" //web端支持(可选) implementation "com.github.ven-coder.Assists:assists-web:最新版本" } ``` ### 2. 注册&开启服务 #### 1.1 主模块AndroidManifest.xml中注册服务 一定要在主模块中注册服务,不然进程被杀服务也会自动被关闭需要再次开启(小米可保持杀进程保持开启,其他vivo、oppo、鸿蒙机型似乎不行) ```xml ``` #### 1.2 开启服务 调用 ``AssistsCore.openAccessibilitySetting()``跳转到无障碍服务设置页面,找到对应的应用开启服务。 服务开启后执行以下API测试是否成功集成: ``` AssistsCore.getAllNodes().forEach { it.logNode() } ``` 这段代码是获取当前页面所有节点元素的基本信息在Logcat(tag:assists_log)打印出来,如下图: 至此,已成功集成Assists。如果没有任何输出请检查集成步骤是否正确。 # 步骤器-快速实现复杂自动化脚本 步骤器可以帮助快速实现复杂的业务场景,比如自动发朋友圈、获取微信所有好友昵称、自动删除好友...等等都是一些逻辑较多的业务场景,步骤器可帮助快速实现。 ### 1.继承 ``StepImpl`` 直接在接口 `onImpl(collector: StepCollector)`写步骤逻辑,每个步骤自定义步骤的序号,用于区分执行的步骤。如果重复则会以最后一个步骤为准 ```kotlin class MyStepImpl:StepImpl() { override fun onImpl(collector: StepCollector) { //定义步骤序号为1的逻辑 collector.next(1) {// 1为步骤的序号 //步骤1逻辑 ... //返回下一步需要执行的序号,通过Step.get([序号]),如果需要重复该步骤可返回Step.repeat,如果返回Step.none则不执行任何步骤,相当于停止 return@next Step.get(2, delay = 1000) //将会执行步骤2逻辑 }.next(2) { //步骤2逻辑 ... //返回下一步需要执行的序号,通过Step.get([序号]) return@next Step.get(3) }.next(3) { //步骤3逻辑 ... //返回下一步需要执行的序号,通过Step.get([序号]) return@next Step.get(4) } 其他步骤 ... } } ``` ### 2. 开始执行 执行前请确保无障碍服务已开启 ```kotlin //从MyStepImpl步骤1开始执行,isBegin是否作为起始步骤,默认false StepManager.execute(MyStepImpl::class.java, 1, isBegin = true) ``` ### 3. 停止执行 ```kotlin // 设置停止标志,将取消所有正在执行的步骤 StepManager.isStop = true ``` ## API列表 ### 初始化和服务管理 | 方法名 | 说明 | 返回值 | |--------|------|--------| | `init(application: Application)` | 初始化AssistsCore | 无 | | `openAccessibilitySetting()` | 打开系统无障碍服务设置页面 | 无 | | `isAccessibilityServiceEnabled()` | 检查无障碍服务是否已开启 | Boolean | | `getPackageName()` | 获取当前窗口所属的应用包名 | String | ### 元素查找 | 方法名 | 说明 | 返回值 | |--------|------|--------| | `findById(id, filterText?, filterDes?, filterClass?)` | 通过id查找所有符合条件的元素 | List | | `AccessibilityNodeInfo.findById(id, filterText?, filterDes?, filterClass?)` | 在指定元素范围内通过id查找元素 | List | | `findByText(text, filterViewId?, filterDes?, filterClass?)` | 通过文本内容查找所有符合条件的元素 | List | | `findByTextAllMatch(text, filterViewId?, filterDes?, filterClass?)` | 查找所有文本完全匹配的元素 | List | | `AccessibilityNodeInfo.findByText(text, filterViewId?, filterDes?, filterClass?)` | 在指定元素范围内通过文本查找元素 | List | | `findByTags(className, viewId?, text?, des?)` | 根据多个条件查找元素 | List | | `AccessibilityNodeInfo.findByTags(className, viewId?, text?, des?)` | 在指定元素范围内根据多个条件查找元素 | List | | `getAllNodes(filterViewId?, filterDes?, filterClass?, filterText?)` | 获取当前窗口中的所有元素 | List | ### 元素信息获取 | 方法名 | 说明 | 返回值 | |--------|------|--------| | `AccessibilityNodeInfo.txt()` | 获取元素的文本内容 | String | | `AccessibilityNodeInfo.des()` | 获取元素的描述内容 | String | | `AccessibilityNodeInfo.getAllText()` | 获取元素的所有文本内容(包括text和contentDescription) | ArrayList | | `AccessibilityNodeInfo.containsText(text)` | 判断元素是否包含指定文本 | Boolean | | `AccessibilityNodeInfo.getBoundsInScreen()` | 获取元素在屏幕中的位置信息 | Rect | | `AccessibilityNodeInfo.getBoundsInParent()` | 获取元素在父容器中的位置信息 | Rect | | `AccessibilityNodeInfo.isVisible(compareNode?, isFullyByCompareNode?)` | 判断元素是否可见 | Boolean | ### 元素层级操作 | 方法名 | 说明 | 返回值 | |--------|------|--------| | `AccessibilityNodeInfo.getNodes()` | 获取指定元素下的所有子元素 | ArrayList | | `AccessibilityNodeInfo.getChildren()` | 获取元素的直接子元素 | ArrayList | | `AccessibilityNodeInfo.findFirstParentByTags(className)` | 查找第一个符合指定类型的父元素 | AccessibilityNodeInfo? | | `AccessibilityNodeInfo.findFirstParentClickable()` | 查找元素的第一个可点击的父元素 | AccessibilityNodeInfo? | ### 元素操作 | 方法名 | 说明 | 返回值 | |--------|------|--------| | `AccessibilityNodeInfo.click()` | 点击元素 | Boolean | | `AccessibilityNodeInfo.longClick()` | 长按元素 | Boolean | | `AccessibilityNodeInfo.paste(text)` | 向元素粘贴文本 | Boolean | | `AccessibilityNodeInfo.setNodeText(text)` | 设置元素的文本内容 | Boolean | | `AccessibilityNodeInfo.selectionText(selectionStart, selectionEnd)` | 选择元素中的文本 | Boolean | | `AccessibilityNodeInfo.scrollForward()` | 向前滚动可滚动元素 | Boolean | | `AccessibilityNodeInfo.scrollBackward()` | 向后滚动可滚动元素 | Boolean | ### [更多API](https://github.com/ven-coder/Assists/blob/master/API_REFERENCE.md) ## 示例教程 - [Appium结合AccessibilityService实现自动化微信登录](https://juejin.cn/post/7483409317564907530) ## 其他教程博客 ### 获取节点信息 - [使用weditor获取节点信息](https://juejin.cn/post/7484188555735613492) - [使用Appium获取节点信息](https://juejin.cn/post/7483409317564907530) - [使用uiautomatorviewer获取节点信息](https://blog.csdn.net/weixin_37496178/article/details/138328871?fromshare=blogdetail&sharetype=blogdetail&sharerId=138328871&sharerefer=PC&sharesource=weixin_37496178&sharefrom=from_link) ### [版本历史](https://github.com/ven-coder/Assists/releases) ## 有问题欢迎反馈交流(微信群二维码失效可以加我拉进群) | 交流群| 个人微信 | |:---------:|:-----------:| | | 1群已满200人,要进1群可加我备注进1群 # 💝 支持开源 开源不易,您的支持是我坚持的动力! 如果Assists框架对您的项目有帮助,可以通过以下方式支持我喔: ### ⭐ Star支持 - 给项目点个Star,让更多开发者发现这个框架 - 分享给身边的朋友和同事 ### 💰 赞助支持 - [爱发电支持](https://afdian.com/a/vencoder) - 您的每一份支持都是我们前进的动力 - 一杯Coffee的微信赞赏 image ### 💁 付费社群 付费社群提供的服务: 1. 完整易于阅读的开发文档 2. Assists开发指导 3. 开发疑难解答 4. 群友互助资源对接 5. 基于Assists开发的抖音养号,小红书养号,支付宝能量收集,支付宝农场,无线远程控制等源码(补充中...) image 微信扫扫即可加入 **定制开发可联系个人微信: x39598** **感谢所有的支持者,得到你们的支持我将会更加完善开源库的能力!** 🚀 ## Star History [![Star History Chart](https://api.star-history.com/svg?repos=ven-coder/Assists&type=Date)](https://www.star-history.com/#ven-coder/Assists&Date) # License [GNU General Public License v3.0](https://github.com/ven-coder/Assists/blob/master/LICENSE)