event时,跳转到加好友页。...> accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes...后面的这两个方法会返回一个AccessibilityNodeInfo列表,一般操作是 遍历,然后筛选特定节点,比如我程序里的,获得底部Tab节点为”通讯录”, 然后点击,跳转后遍历,筛选”群聊”...android.os.Handler; import android.util.Log; import android.view.accessibility.AccessibilityEvent; import...android.view.accessibility.AccessibilityNodeInfo; import java.util.List; /** * 描述:微信监控服务类 * * @author
在使用 AccessibilityService 遍历包含 WebView 的 AccessibilityNodeInfo 时会在某些情况下必现 StackOverflowError 的错误,导致应用崩溃...0x00 异常 最近使用 Android 的 AccessibilityService 做一些自动化操作时发现,在部分机器上遍历包含 WebView 页面的 AccessibilityNodeInfo...时,某些页面必定会引起 StackOverflowError 错误,经过一番查证,定位到主要与系统所使用的 Android System WebView 版本有关,属于 WebView 的 Bug。...相关说明可以参考 Android: Infinite loop of FrameLayouts in accessibility tree 的讨论。...; 一个是使用递归遍历 AccessibilityNodeInfo 时限制遍历的最大深度,这个深度根据情况大致在 40~70之间即可,既要基本保证能遍历完正常的 NodeTree 内的 Node,又要不引起
辅助功能(AccessibilityService)是一个Android系统提供的一种服务,继承自Service类。..." android:enabled="true" android:exported="true" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE...> accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"...这里的配置有很多属性,我们只研究其中的6个: android:packageNames:指定辅助服务监听哪些应用发出事件,多个应用包名之间用逗号分隔,如果不填,则监听手机上所有应用。...searchPacket方法通过递归查找红包,当找到某个节点内容包含“领取红包”就终止递归,然后循环查找这个节点和它的父节点的第一个能够点击的节点,执行点击事件rootInActiveWindow.performAction
小卡片,回复 “合集” 获取系统性的学习笔记和测试开发技能图谱 背景 在之前的一篇文章《移动端UI自动化过程中的难点及应对策略》中,我们提到在Android自动化测试执行过程中经常会遇到一些非预期的系统弹框...,我们可以通过无障碍服务来实现智能点击处理,但是通常这个服务只能手动到设置中开启,今天就跟大家分享一下如何实现一个自定义的无障碍服务以及如何自动化的开启它。...实现自定义的无障碍服务 自定义一个服务继承自AccessibilityService package com.android.jarvis.accessibility import android.accessibilityservice.AccessibilityService...import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityNodeInfo...="@xml/accessibility_service_config" /> 自动开启无障碍服务 可以通过执行下面的命令就可以自动开启指定的无障碍服务: adb
Android系统提供给的一种服务,本身是继承Service类的。...二、辅助功能基本配置和框架搭建 创建自定义辅助功能服务类 import android.accessibilityservice.AccessibilityService; import android.view.accessibility.AccessibilityEvent...// 注册辅助功能服务 android:name=".AccessibilitySampleService" android:label="@string/accessibility_tip...> 上面android:label="@string/accessibility_tip"是配置此辅助功能服务在系统辅助功能页面里面显示的名字。...界面节点查找操作 AccessibilityNodeInfo提供两种查找View节点的方法 1.
UiAutomator是由谷歌在Android4.1版本发布时推出的一款用Java编写的UI自动化测试框架。...基于Accessibility服务,该工具提供了对外开放的的api,可以使用这些api对安卓应用进行一系列的自动化测试操作。...UiAutomator是Android自动化测试框架,其最大的特点就是可以跨进程操作,基本用法: device = UiDevice.getInstance(getInstrumentation());...本章介绍UIObject和UiSelector UiObject代表了Android应用中定义的任意的View控件,可以根据UiSelector属性在运行时找到匹配的视图,可以对应不同的view。...根节点获取之后,通过递归 translateCompoundSelector遍历 子节点。
无障碍服务旨在帮助身心有障碍的用户使用Android设备和应用。...无障碍服务在后台运行,当无障碍事件被激活时系统会执行AccessibilityService的onAccessibilityEvent(AccessibilityEvent event)方法。...这些事件表示在用户界面中的一些状态的改变,例如:焦点的改变、按钮被点击等。这类服务可以有选择性地请求查询活动窗口的内容。...无障碍服务的开发需要继承AccessibilityService和实现它的抽象方法。...指定无障碍服务的反馈方式 android:accessibilityFlags 指定额外的标志 android:canRetrieveWindowContent 指定是否允许我们的程序读取窗口中的节点和内容
辅助功能原理与基本使用详解 一、辅助功能基本原理 辅助功能(AccessibilityService)其实是一个Android系统提供给的一种服务,本身是继承Service类的。...二、辅助功能基本配置和框架搭建 创建自定义辅助功能服务类 import android.accessibilityservice.AccessibilityService; import android.view.accessibility.AccessibilityEvent...// 注册辅助功能服务 android:name=".AccessibilitySampleService" android:label="@string/accessibility_tip...> 上面android:label="@string/accessibility_tip"是配置此辅助功能服务在系统辅助功能页面里面显示的名字。...界面节点查找操作 AccessibilityNodeInfo提供两种查找View节点的方法 1.
简单实现了微信自动抢红包的服务,原理就是根据关键字找到相应的View, 然后自动点击。...主要是用到AccessibilityService这个辅助服务,基本可以满足自动抢红包的功能,但是有些逻辑需要优化,比如,拆完一个红包后,必须手动点击返回键,才能进行下一次自动抢红包。...> accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes...="@string/accessibility_description" android:notificationTimeout="100" android:packageNames="...; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityNodeInfo
智能安装功能的实现原理要借助Android提供的无障碍服务,关于无障碍服务的详细讲解可参考官方文档:http://developer.android.com/guide/topics/ui/accessibility...accessibilityFeedbackType指定无障碍服务的反馈方式,实际上无障碍服务这个功能是Android提供给一些残疾人士使用的,比如说盲人不方便使用手机,就可以借助无障碍服务配合语音反馈来操作手机...> accessibility_service_description">智能安装服务,无需用户的任何操作就可以自动安装程序。...接下来就是调用iterateNodesAndHandle()方法来去解析当前界面的节点了,这里我们通过递归的方式将安装界面中所有的子节点全部进行遍历,当发现按钮节点的时候就进行判断,按钮上的文字是不是“..."); startActivity(localIntent); } } 当点击了开启智能安装服务按钮时,我们通过Intent跳转到系统的无障碍服务界面
智能安装功能的实现原理要借助Android提供的无障碍服务,关于无障碍服务的详细讲解可参考官方文档:http://developer.android.com/guide/topics/ui/accessibility...accessibilityFeedbackType指定无障碍服务的反馈方式,实际上无障碍服务这个功能是Android提供给一些残疾人士使用的,比如说盲人不方便使用手机,就可以借助无障碍服务配合语音反馈来操作手机...> accessibility_service_description">智能安装服务,无需用户的任何操作就可以自动安装程序。...接下来就是调用iterateNodesAndHandle()方法来去解析当前界面的节点了,这里我们通过递归的方式将安装界面中所有的子节点全部进行遍历,当发现按钮节点的时候就进行判断,按钮上的文字是不是“..."); startActivity(localIntent); } } 当点击了开启智能安装服务按钮时,我们通过Intent跳转到系统的无障碍服务界面,在这里启动智能安装服务。
> accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes...需要注意的是,由于界面元素 id 经常会变动,为了增加程序的可适配性,可以换一种方案:查找元素树中的第一个 EditText 元素。 接着,我们通过遍历拿到当前界面的所有节点元素。...; } return result; } 第 4 步,自动化写入内容 想要完全模拟人为输入,可以遍历上面拿到的内容,一个一个字符的输入。...第 5 步,编写界面 首次打开应用的时候,默认无障碍服务是关闭的,需要手动去开启一次。 开启服务之后,就可以使用朋友圈防折叠服务了。 ?...3 结 果 结 论 通过上面的 5 步操作,就完成了朋友圈的防折叠服务的开发。 平常使用的时候,只需要开启防折叠无障碍服务,复制任务文案,打开朋友圈的发布界面,服务会自动化完成输入。
> accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes..." android:notificationTimeout="100" /> 三 用法 onServiceConnected() 服务连接时,也就是第一次打开时调用,这里我们可以初始化常量和标签等 onCreate...() 服务创建时调用,初始化一些数据 onDestroy() 服务消亡是,或者用户关闭时,调用,这里我们可以去做些业务相关的释放任务, onAccessibilityEvent() 监测到内容节点时调用...在遍历到需要的安装按钮调用api来实现自动点击功能,微信抢红包是监测微信红白的activity: aAccessibilityNodeInfo.performAction(targetAction) 关键部分...,“有安装”,有“下一步”,有“我知道了”,“有同意”,因此后期做兼容时废了很大力气,不仅需要判断机型还要判断rom版本,此项目中几乎覆盖了市场上主流机型,不兼容的请读者自我加入if语言判断,由于首次点击安装按钮时
实现步骤 第 1 步,新建 Android 项目 使用 Android Studio 新建一个项目,并创建一个无障碍服务,设置只处理微信应用内的页面事件 //新建一个服务 public class MsgService...> accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes...通过分析,发现一篇文章的正文内容都包含在控件中 text 属性中,因此,我们只需要遍历出所有的控件,找出所有 text 属性不为空的内容。...需要注意的是,由于微信基于腾讯 X5 内核,内容包裹在 WebView 内部,直接获取控件是获取不到的,因此,需要在服务初始化的时候配置 flags 为增强 //新建一个服务 @Override protected...).show(); } 接着,先找到 WebView 控件,然后遍历子元素,找出所有子元素 text 不为空的内容 /*** * 获取所有的文本内容 * @param webNode *
Android 间谍软件是最常见的恶意软件之一,攻击者通过 Android 间谍软件来跟踪用户位置、检查 Web 浏览记录,甚至窃取敏感信息(密码和信用卡号等),其对银行机构与客户构成的威胁与 Android...借助无障碍服务,无需任何用户输入,SpyNote 就可以点击“安装”和“更新”按钮: if("android.widget.Button".equals(accessibilityNodeInfo0.getClassName....getSource(), "android.view.ViewGroup").iterator();AccessibilityNodeInfo accessibilityNodeInfo1 = accessibilityNodeInfo0...收到攻击者的命令后,攻击者的 C&C 服务器会收到从网页获取的凭据和信息。...结论 SpyNote 将继续使用 Accessibility Service 从用户设备收集基本数据,并且能够朝着更便利分发的方向发展。
Accessibility特性和服务帮助用户更好地使用Android设备。...图1.1Accessibility官方简介 二、 运行原理 Accessibility[2]相关服务以及接口在Android 1.6时期就已经被加入,其中以AccessibilityService组件作为入口...,结合AccessibilityEvent,AccessibilityNodeInfo等关键类完成辅助功能(其中AccessibilityNodeInfo于Android 4.0加入)。...AccessibilityService是继承了Service的抽象类,生命周期不由应用本身管理,而是由系统和用户的显式操作所控制,运行后当有AccessibilityEvent被发出时该服务会收到系统的回调...2)用户对Accessibility的认识不足 如果说起ROOT,相信能引起用户的谨慎注意,但是设计到Accessibility,包括无障碍服务、辅助功能等词语时,大多用户没有足够的安全防护意识,甚至由于服务置于后台
注册了一个Accessibility服务。...(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at android.view.accessibility.IAccessibilityManager...Service类中定义了一个bool类型的变量mIsAutomation,表示当前服务是否是UiAutomation。...然后经过一系列的函数调用,进到Service的bindLocked函数。 /** * Binds to the accessibility service....由于AccessibilityService比较特殊的地方在于需要在设置的辅助功能里开启对应的服务,点击开启后,会执行到BindService逻辑,进而执行到AccessibilityService的onBind
整个交互的过程如下图所示: 核心的原理部分 要实现一个自动化订票机器人服务,需要借助于Android上的 无障碍服务 ,无障碍服务是一种应用,可提供界面增强功能,来协助残障用户或可能暂时无法与设备进行全面互动的用户完成操作...(例如,当用户禁用无障碍服务时) } } step3.在AndroidManifest.xml文件中补充一下服务的描述,这个需要放在application 的下面,这一步骤的主要作用是注册我们这个服务...android:resource="@xml/accessibility_service_config" /> step4.新增上面Android描述文件引用的资源文件...> accessibility-service xmlns:android="android.com/apk/res/android>" android:accessibilityEventTypes...然后嘿嘿,曾经火爆一时的抢红包插件,你想到应该怎么去实现了吗?
Support Library简介 Android Support Library(安卓支持库)是一系列代码库的集合,提供对早期Android 1.6+(API 4+)系统的兼容,并包含一些额外功能的API...每一个库针对不同的Android平台范围,并提供特定的功能集合。 Support Library特性 下面将介绍不同支持库所提供的主要功能和支持的安卓版本。...Accessibility可操作性 ExploreByTouchHelper - Adds a helper class for implementing accessibility support for...For more information about implementing accessibility, see Accessibility....AccessibilityNodeInfoCompat - Adds support for AccessibilityNodeInfo.
作者简介 祥星,携程Android开发工程师,对Android自动化测试有深入的研究。 ? 一、简介 快速的业务迭代要求快速的App发版节奏,随之而来的是质量保障压力的增大。...下面举例如何通过AccessibilityNodeInfo获取当前页面所有点击元素: // 递归获取当前节点所有可点击的子节点 public static void getCurrentAllClickViews...机票、酒店和火车又有自的跳转页面,这一过程一直持续,直到页面无事件为止。 研究App的遍历问题本质上就转化成研究图的遍历问题,因此我们借鉴图的深度遍历算法制定探索策略。...pb是 press back的缩写。 3.2 算法 ? 算法的整体思想是采用递归的方式不断地在新状态下执行探索,直到探索完成。...由IAET基础服务和探索驱动两大模块组成。 基础服务模块 基础服务模块在保证保证探索正常运行的基础上,承担UI驱动的能力,主要由UI驱动和异常监控系统两部分组成。
领取专属 10元无门槛券
手把手带您无忧上云