Android自動化無障礙服務開源庫-Assists v3.0.0

Vennnnn發表於2024-06-12

Assists v3.0.0

Android無障礙服務(AccessibilityService)開發框架,快速開發複雜自動化任務、遠端協助、監聽等


Android無障礙服務能做什麼

利用Android無障礙服務可以開發一些Android系統內的自動化任務,比如經典的微信自動搶紅包、支付寶螞蟻森林自動澆水、芭芭農場自動施肥等

還可以開發遠端協助功能,市面上向日葵等一些遠端協助功能就是利用無障礙服務和投屏許可權開發的

還能開發一些拓客、引流、營銷系統,抖音自動點贊評論、微博自動轉發評論關注等

總之,利用Android的無障礙服務可以開發各種自動化的任務或者介面資訊監聽、遠端協助等

Assists開發框架能做什麼

按照Google官方文件繼承實現的無障礙服務,對於複雜的自動化任務,不僅程式碼邏輯實現不清晰,後期的修改維護也會很頭疼,所以在實踐過程中實現了這個框架

在這個框架下開發Android無障礙服務業務可以讓你的業務開發更加快速、邏輯更加健壯且容易維護。

v3.0.0更新日誌

  1. 步驟器重構:支援協程、執行下一步方式改為直接指定
  2. 獲取螢幕影像
  3. 整合opencv,封裝影像匹配

v2.0.0版本檢視這裡

功能計劃

  • 影像識別 (✅完成)
  • 圖文識別
  • 錄屏
  • js支援
  • vue.js支援
  • uniapp外掛
  • flutter外掛

Demo部分演示

影像識別支付寶自動收能量 自動發朋友圈 自動滑動朋友圈
Android自動化無障礙服務開源庫-Assists v3.0.0 Android自動化無障礙服務開源庫-Assists v3.0.0 Android自動化無障礙服務開源庫-Assists v3.0.0

使用

1. 新增庫

1.1 Clone或下載原始碼

版本v3.0.0:https://github.com/ven-coder/Assists/releases/tag/3.0.0

1.2 匯入依賴庫

解壓後以module方式匯入assists,opencv影像識別為可選庫,如果需要使用到影像識別可匯入其中的assists-opencv
Android自動化無障礙服務開源庫-Assists v3.0.0


Android自動化無障礙服務開源庫-Assists v3.0.0

1.3 引用assists

匯入成功後在主模組build.gradle新增引用

dependencies {
    ...其他依賴
    implementation project(':assists')
    implementation project(':assists-opencv')//影像識別庫,可選,按需新增
}

2. 註冊服務

1.1 主模組AndroidManifest.xml中註冊服務

一定要在主模組中註冊服務,不然程序被殺服務也會自動被關閉需要再次開啟(小米可保持殺程序保持開啟,其他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

步驟器-快速實現複雜業務

步驟器可以幫助快速實現複雜的業務場景,比如自動發朋友圈、獲取微信所有好友暱稱、自動刪除好友...等等都是一些邏輯較多的業務場景,步驟器可幫助快速實現。
前提: 已完成前面的配置

1.繼承StepImpl

直接在介面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)
        }
	其他步驟
	...
    }
}

2. 開始執行

執行前請確保無障礙服務已開啟

//從OpenWechat的步驟序號1開始執行,isBegin需要為true,預設false
StepManager.execute(OpenWechat::class.java, 1, isBegin = true)

影像識別模組使用

影像識別模組主要是對opencv的模板匹配api和Android的螢幕影像獲取進行了一層封裝,下面是所封裝api的使用說明

檢查是否擁有錄屏許可權

Assists.isEnableScreenCapture()

請求錄屏許可權

Assists.requestScreenCapture()

獲取螢幕影像

OpencvWrapper.getScreen()

透過Assets獲取影像

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軸範圍

返回符合條件的匹配座標列表

以上具體的使用最好直接檢視demo原始碼

更多開發文件請檢視:https://github.com/ven-coder/Assists/wiki

Demo下載

掃碼下載


Android自動化無障礙服務開源庫-Assists v3.0.0

📥直接下載

有問題歡迎反饋交流(微信群二維碼失效可以加我拉進群)

交流群 個人微信
Android自動化無障礙服務開源庫-Assists v3.0.0 Android自動化無障礙服務開源庫-Assists v3.0.0

開源庫地址

相關文章