AccessibilityService 浅谈1

913 阅读1分钟

1. AccessibilityService 是运行在本app的一个Service,是一个帮助残障人士使用的Service,却被用来做成RPA功能,通过它来实现自动点击,最为著名的就是微信抢红包的功能.

2. 先讲讲怎么使用这个服务,下一篇文章分析原理.(所有代码都基于Kotlin实现)

1.1 先定一个Service,继承AccessibilityService,实现2个抽象的方法

override fun onAccessibilityEvent(event: AccessibilityEvent) {
override fun onInterrupt() {

如果为了初始化相关的功能,可以在Service 连接成功的时候做一些初始化,重写

override fun onServiceConnected() {

注意这个类是在主线程中执行,所以不能执行长时间的任务,避免主线程的阻塞. 2. 2. AndroidManifest.xml 中 声明上述定义的Service

<service
    android:name="com.sunshine.happiness.rpa.service.AppAccessibilityService"
    android:description="@string/app_name"
    android:exported="false"
    android:label="@string/app_name"
    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/app_accessibility" />
</service>

上述的内容都是需要的 2. 3. xml 文件中定义app_accessibility.xml

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:accessibilityFlags="flagRequestAccessibilityButton|flagRetrieveInteractiveWindows|flagRequestFilterKeyEvents|flagReportViewIds|flagRequestEnhancedWebAccessibility|flagRequestTouchExplorationMode|flagIncludeNotImportantViews|flagDefault"
    android:canPerformGestures="true"
    android:canRequestEnhancedWebAccessibility="true"
    android:canRequestFilterKeyEvents="true"
    android:canRetrieveWindowContent="true"
    android:canTakeScreenshot="true"
    android:description="@string/task_accessibility_permission_title"
    android:intro="@string/task_app_permission_title"
    android:notificationTimeout="800"
    android:packageNames="com.jingyao.easybike,com.tencent.mm,com.eg.android.AlipayGphone,com.taobao.taobao,com.unionpay,com.tencent.mobileqq,com.jingdong.app.mall,com.ss.android.ugc.aweme,com.ss.android.ugc.aweme.lite,com.android.settings,com.sankuai.meituan"
    android:settingsActivity="com.sunshine.happiness.ui.activity.login.PhoneLoginActivity"
    android:summary="@string/task_accessibility_permission_not_open"
    android:tileService="@string/confirm_accessibility" />

相关属性可以参考官方文档

developer.android.google.cn/guide/topic…

如果想要Service能正常使用,上述的属性需要填好.

完成上述的操作,您的应用已经可以使用无障碍服务了.

3. AccessibilityService 这个服务使用,可以被动使用,也可以主动实现模拟点击,被动服务就是监听特定应用的消息,然后通过分析关键信息,再进行下一步骤.著名的抢红包就是这个原理.