Android开发自动话操作Accessibilityservice和adb结合

Hermes+Bridge安卓无障碍自动化:不Root不ADB的稳定操控方案 AccessibilityService是Android 10+系统中唯一无需Root、无需ADB调试、跨App稳定的官方UI交互接口,其设计初衷为辅助功能,却成为工业级安卓自动化的合规基石。基于事件驱动机制,它通过AccessibilityEvent捕获通知、点击等用户行为,规避了ADB轮询失效、截图识别不准等痛点。Hermes框架深度聚焦该API的稳定性与低资源占用,配合Bridge进程间通信模块和Termux沙盒环境,构建出轻量、可控、可审计的自动化执行链。该方案广泛适用于RPA流程集成、IoT设备远 阅读详情

           网上有很多有关于accessibilityservice的文章,也有adb命令的文章,但是结合起来的好像没有,最近项目有用到这两个技术的结合,就融合了一下,有不完善或者写得不对的地方请大家指出来,共同研究研究。

         

           1、关于Accessibilityservice:

                 官方解释:                        

The classes in this package are used for development of accessibility service that provide alternative or augmented feedback to the user.
使用这个类可以开发用于给用户提供替换或者是增强反馈的辅助功能服务。

An AccessibilityService runs in the background and receives callbacks by the system when AccessibilityEvents are fired. Such events denote some state transition in the user interface, for example, the focus has changed, a button has been clicked, etc. Such a service can optionally request the capability for querying the content of the active window. Development of an accessibility service requires extends this class and implements its abstract methods.
一个AccessibilityService在后台运行并接收系统AccessibilityEvents事件的回调,当用户界面的状态发生改变时会触发AccessibilityEvents事件,例如焦点的变化,点击一个按钮。这个服务可以获取到活动窗口的内容,开发一个辅助功能服务需要继承AccessibilityService并实现其中的抽象方法。

An AccessibilityServiceInfo describes an AccessibilityServiceInfo. The system notifies an AccessibilityService for AccessibilityEvents according to the information encapsulated in this class.
一个AccessibilityService有一个用于描述AccessibilityService的AccessibilityServiceInfo对象,系统会通知AccessibilityService根据AccessibilityServiceInfo把信息装进AccessibilityEvents中。


具体操作看:http://blog.youkuaiyun.com/u011965040/article/details/53257005

写得很好,也很仔细


 2、关于adb

adb是根于命令行执行相应的操作,前提是必须有Root权限,才能执行adb命令


模拟点击

execShellCmd("input tap  50 50");              //点击【50,50】那个点
模拟滑动

execShellCmd("input swipe 500 1000 500 600");       
模拟输入

execShellCmd("input text '123132abc'");      //不支持中文,好像可以去下载相应的转码包好像可以,没试过     
模拟点击手机按键

execShellCmd("input keyevent XX");         //后面的值有相应的按键,可到网上查,我就不贴出来了


/**
 * 执行shell命令
 *
 * @param cmd
 */
private void execShellCmd(String cmd) {
    try {
        // 申请获取root权限,这一步很重要,不然会没有作用
        Process process = Runtime.getRuntime().exec("su");
        // 获取输出流
        OutputStream outputStream = process.getOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(
                outputStream);
        dataOutputStream.writeBytes(cmd);
        dataOutputStream.flush();
        dataOutputStream.close();
        outputStream.close();
    } catch (Throwable t) {
        t.printStackTrace();
    }
}




不管是Accessibilityservice还是adb都可以完成自动话操作,但是都有局限性,Accessibilityservice的点击还是滑动是根据空间的 id 或者是 text 来执行,如果有些控件是自定义控件,点击事件不是那么明显,你却想点击怎么办?adb需要坐标,需要去计算。

Accessibilityservice点击是去触发点击,adb是类似于touch事件,


当Accessibilityservice和adb结合起来就可以完美的解决上面的问题,因为Accessibilityservice可以锁定控件,得出控件信息,比如:id text 控件类型 坐标

/**
 * 得出控件信息---(text,id)
 *
 */
private void recycle(AccessibilityNodeInfo info) {
    if (info.getChildCount() == 0) {
        
        //得出控件上的文字text
        Log.i(TAG, "---------------" + info.getText());
        //得出控件上的id
        Log.i(TAG, "---------------"+ info.getWindowId());
        //得出控件的坐标
        Rect rect = new Rect();
        info.getBoundsInScreen(rect);
        Log.i(TAG, "--------" + rect.left + "-----" + rect.top + "-----" + rect.right + "-----" + rect.bottom);
    } else {
        for (int i = 0; i < info.getChildCount(); i++) {
            if (info.getChild(i) != null) {
                recycle(info.getChild(i));
            }
        }
    }
}

所有信息一目了然,



他是不支持点击的,可以获取坐标点,也是闭区间,可以完美执行点击

Rect rect = new Rect();
node.getBoundsInScreen(rect);
execShellCmd("input tap " + rect.left + " " + rect.top);              //点





AccessibilityService vs UIAutomator2:Android自动化测试2大方案深度对比 本文深入对比了Android自动化测试中的两大主流方案AccessibilityService和UIAutomator2,从技术架构、核心能力到典型场景应用进行全面分析。AccessibilityService凭借系统级权限在跨应用测试中表现优异,而UIAutomator2则在官方支持和执行效率上更具优势,帮助开发者根据具体需求做出最佳技术选型。 阅读详情

相关推荐

从ADB到UI定位:拆解ClawPhone项目,掌握Android自动化核心技术

移动端自动化是提升开发与测试效率的关键技术领域,其核心在于让程序能够控制并理解移动设备。这一过程主要依赖于两大技术支柱:设备通信与界面交互。在Android生态中,ADB(Android Debug Bridge)是设备通信的基石,它建立了电脑与安卓设备之间的调试桥梁,允许执行安装、截图、模拟输入等底层命令,为自动化提供了执行能力。然而,仅有“手”还不够,程序还需要“眼睛”来识别屏幕元素,这就是UI定位技术的价值所在。通过集成AccessibilityService、UIAutomator2等框架,自动化脚

weixin_33681778的博客 442

Android自动化之AccessibilityService模拟操作(经验总结)

有两种能实现后台运行并模拟操作安卓手机的方式,一种是使用adb命令模拟操作(参考:Android自动化之adb模拟操作(可实现按键精灵和手机输入法)),一种是AccessibilityService(参考:Android自动化之AccessibilityService模拟操作(快速集成))。 这篇笔记总结下使用AccessibilityService的一些经验。 经验总结 1、使用ecl

桑心剑 2万+

macOS本地安卓自动化:基于ADB的微信/QQ/钉钉操作方案

安卓自动化是指通过系统级接口(如ADB)实现对Android设备的程序化控制,其核心原理是绕过应用层协议,直接驱动无障碍服务与UI组件。相比Appium等测试框架,它具备低延迟、高保真、免Root、纯本地运行的技术优势,特别适合办公场景下的重复性任务提效。在macOS平台,该技术可支撑微信消息发送、QQ群通知响应、钉钉审批提交等真实业务流,但受限于架构兼容性,Intel Mac因ADB稳定性、scrcpy渲染精度及内核扩展支持,成为当前最可靠的部署环境。本文详解一套面向开发者的轻量级本地通信桥接方案——Op

abc20899的专栏 480

无障碍服务AccessibilityService详解

无障碍服务 什么是无障碍?为什么需要无障碍? 让应用使用起来没有障碍。Android应用的目标是让所有人都可以使用,包括但不限于视力受损、色盲、听力受损、精细动作失能的人。要想这些有无障碍需求的用户有更好的体验,那么开发应用就要多考虑无障碍功能。 Android无障碍服务 无障碍服务是 Android框架的一项功能,旨在为了给使用Android设备的残障人士提供交互反馈,让他们能够更方便的使用Android设备。 常见无障碍服务示例 开关访问:允许行动不便的 Android 用户使用一个或多个开关与设备进

feng海涛 1万+

Android远程监控技术解析:从MediaProjection到AccessibilityService的合法应用

远程监控技术在现代移动安全与自动化测试中扮演着重要角色,其核心原理涉及操作系统权限管理与数据捕获机制。在Android平台上,该技术主要通过MediaProjection API实现屏幕内容捕获,利用AccessibilityService监听输入事件,这些机制都需要用户明确授权才能触发。从技术价值角度看,理解这些底层原理不仅有助于构建更完善的安全防御体系,还能为自动化测试、企业设备管理(MDM)等场景提供关键技术支撑。在自动化测试领域,远程截图可用于失败场景的现场还原;在企业安全审计中,合规的键盘记录可结

weixin_34176694的博客 375

Android无障碍服务(AccessibilityService)原理与自动化开发实战指南

在Android开发领域,系统级自动化是一个极具价值的技术方向,它允许应用突破常规沙盒限制,实现跨应用的界面交互与操作模拟。其核心原理在于通过事件监听机制捕获屏幕内容变化,并模拟用户手势操作,这为自动化测试、便捷工具开发等场景提供了强大支持。AccessibilityService正是实现这一能力的关键组件,它通过监听AccessibilityEvent事件流,获取界面节点信息并执行点击、滑动等操作,从而构建出高效的自动化解决方案。本文聚焦于Android无障碍服务的实战应用,深入解析其工作原理、能力边界与

weixin_34332905的博客 410

Android Accessibility大致解析,通过adb运行纯java代码打开应用的辅助功能

辅助功能

qq_44203816的博客 1419

Android零点击自动化:基于AccessibilityService与ADB的实战开发指南

移动端自动化技术旨在通过程序模拟用户操作,实现任务的自动执行,其核心价值在于提升效率、减少重复劳动。其实现原理主要依赖于系统提供的底层接口,在Android平台上,AccessibilityService(辅助功能服务)和ADB(Android Debug Bridge)是两大关键技术支柱。AccessibilityService允许应用以无障碍方式访问屏幕内容与控件,实现精准的界面元素定位与交互模拟;ADB则提供了更底层的Shell命令控制能力。这两项技术的结合,为构建稳定、高效的本地化自动化方案奠定了坚

weixin_28686771的博客 374

通过ADB命令开启无障碍服务,导致其他应用的无障碍权限被关闭

使用 ADB 命令直接开启无障碍服务时,导致其他应用的无障碍权限被关闭

ぃ随风逍遥う的博客 5053

安卓自动化抢购助手开发实战:基于Appium与ADB的跨平台脚本实现

安卓自动化测试是移动应用开发与质量保障中的关键技术,其核心原理是通过程序模拟真实用户操作,实现对应用界面的精准控制与业务流程验证。在技术价值层面,自动化不仅能显著提升测试效率、保障应用稳定性,更在特定场景下为重复性操作提供可靠的解决方案。随着电商、票务等平台限时抢购需求的增长,基于安卓自动化框架(如Appium)与底层调试工具(ADB)开发辅助脚本,成为技术实践的热点。通过元素定位、定时触发与流程编排,开发者可以构建跨平台的自动化工具,在合规前提下模拟用户完成商品查找、定时抢购等操作。本文聚焦于这一实践,详

weixin_30902251的博客 392

基于AccessibilityService实现apk自动安装源码

基于AccessibilityService实现apk自动安装,Android studio实现

基于AccessibilityService和ADB shell实现自动操作

实现自动操作,就是利用代码脚本,模拟人的操作,包括点击,滑动,输入文字,物理按键等,实现一系列操作。为什么要实现自动操作?为了自动化测试?android app的功能越来越多,测试们的事情都忙不过来,这时,有些大量的工作就可以交给脚本来完成。比如,测试抢微信红包的工作,测试游戏打怪升级,测试自动聊天,测试考勤打卡等等等等。。。。android中多种模拟操作的方法:第一种:模拟MotionEvent这

虎躯一震的博客 1万+

基于AccessibilityService实现钉钉自动签到

基于AccessibilityService服务实现的阿里钉钉自动签到程序,稍作修改可实现任意程序的自动化操作

最新详解android自动化无障碍服务accessibilityservice以及高版本问题

前言 无障碍服务accessibilityservice是什么 简单来说 无障碍服务就是一个为残障人士 尤其是视觉障碍人士提供的一个帮助服务。具体就是可以识别控件 文字 可以配合语音助手 操作和 使用手机。 但是在实际的生产生活中我们可以利用无障碍的这些特性做到一些自动化的事件。诸如 1.自动化抢 微信 QQ红包 2.自动化点赞服务 3.自动化管理 安装和卸载 4.配合其他服务做成群控软件 无障碍服务与ADB和appium的区别 理论上这三者都可以做到自动化处理,但是无障碍要比后面两者更有效 且更方便部署和

HURUWO的技术博客 4467

DJI MobileSDK运行实例代码教程(保姆级)坑踩完了

其中比较重要的是PackageName也就是我们应用的包名,在这里我们可以直接使用官方文档中的包名,com.dji.ImportSDKDemo,appname为:ImportSDKDemo,其他的可以随意。在C盘中根据路径先找到 “用户/admin/.gradle”下的.gradle文件夹,然后依次打开wrapper/dists文件夹,找到我们刚刚要下载的gradle版本名的文件夹。在Androidstudio中打开,选在打开项目选择文件下载后的保存路径(解压之后的),在打开项目后会自动下载gradle。

k1121568的博客 2861

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 524

Appium结合AccessibilityService实现自动化微信登录

配置Appium集成Assists通过Appium查看节点信息使用AssistsAPI通过节点信息id获取元素并执行自动化逻辑教程源码:https://github.com/ven-coder/wechat-login-auto。

weixin_37496178的博客 1333

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)是一种将光电耦合器和MOSFET结合在一起的器件,用于实现电气隔离和信号传输。选择合适的光耦合MOSFET时,还需要考虑具体应用的需求和环境条件,以确保最佳性能和可靠性。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。

eydj2008的专栏 1725

python accessibilityservice_详解android无障碍服务accessibilityservice以及高版本问题_1_如何开启获得无障碍...

前言无障碍服务accessibilityservice是什么简单来说 无障碍服务就是一个为残障人士 尤其是视觉障碍人士提供的一个帮助服务。具体就是可以识别控件 文字 可以配合语音助手 操作和 使用手机。但是在实际的生产生活中我们可以利用无障碍的这些特性做到一些自动化的事件。诸如1.自动化抢 微信 QQ红包2.自动化点赞服务3.自动化管理 安装和卸载4.配合其他服务做成群控软件无障碍服务与ADB和a...

weixin_32228501的博客 2272

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件

本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。

weixin_30696427的博客 281

C语言实战:最小二乘法在传感器数据校准中的应用(附完整代码)

本文详细介绍了如何使用C语言实现最小二乘法,对传感器数据进行线性校准。通过模拟带噪声的传感器数据,手把手演示了从核心算法实现、参数计算到效果验证的完整流程,并提供了可直接编译运行的完整源码,帮助嵌入式开发者解决传感器数据不准的常见问题,提升系统测量精度。

weixin_28025327的博客 515
下一篇: 判断是否有网络
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值