问题背景
AccessibilityService获取微信版本8.0.52以上的节点元素时信息会被混淆打乱,导致无法正常执行AccessibilityService自动化逻辑,这个问题直接影响自动化脚本对于后面微信版本的兼容。
解决
在自动化开源库Assists有网友提了这个关于微信的issues,最终也是他提供的解决方法:
创建注册一个与系统内置的相同包名类名的无障碍服务,比如:
com.google.android.marvin.talkback.TalkBackService
最终通过验证确实可以👍
但是发现开启这个服务后小米手机屏幕上一直显示两行文字:
因为com.google.android.marvin.talkback.TalkBackService
是Android系统自带的屏幕阅读器服务所以开启后会一直显示这两行文字
解决办法是可以定义其他系统无障碍服务相同包名类名的服务,比如:com.google.android.accessibility.selecttospeak.SelectToSpeakService
在Assists中已经定义好了这个服务,集成这个库然后直接在自己的主模块中注册这个服务来使用即可
ini
<?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.google.android.accessibility.selecttospeak.SelectToSpeakService"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<!--android:priority="10000" 可提高服务在设置中的权重,排在前面 -->
<intent-filter android:priority="10000">
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/assists_service" />
</service>
</application>
</manifest>