AutoJs6 中通过 Shizuku 管理无障碍服务的注意事项与解决方案

AutoJs6 中通过 Shizuku 管理无障碍服务的注意事项与解决方案

【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 【免费下载链接】AutoJs6 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6

背景介绍

在 Android 自动化工具 AutoJs6 的使用过程中,无障碍服务(Accessibility Service)是实现自动化操作的核心功能之一。开发者经常需要通过命令行或脚本方式来动态管理无障碍服务的开启与关闭。其中,Shizuku 作为一个强大的系统 API 调用工具,常被用于此类操作。

问题现象

当使用 Shizuku 执行以下命令开启 AutoJs6 的无障碍服务时:

shizuku('settings put secure enabled_accessibility_services org.autojs.autojs6/org.autojs.autojs.core.accessibility.AccessibilityServiceUsher')

会导致一个潜在问题:设备上其他已经开启的无障碍服务会被意外关闭,系统中仅保留 AutoJs6 的无障碍服务处于激活状态。

原因分析

这种现象的根本原因在于 Android 系统对无障碍服务的管理机制。enabled_accessibility_services 这个系统设置项存储的是所有已启用无障碍服务的列表,采用冒号(:)分隔的字符串格式。当直接使用 settings put 命令写入新值时,系统会完全覆盖原有内容,而不是追加新内容。

解决方案

方案一:追加模式(推荐)

更安全的做法是采用追加模式,保留原有的无障碍服务,同时添加新的服务。可以通过以下命令实现:

shizuku('settings put secure enabled_accessibility_services "$(settings get secure enabled_accessibility_services):org.autojs.autojs6/org.autojs.autojs.core.accessibility.AccessibilityServiceUsher"')

这个命令首先获取当前已启用的无障碍服务列表,然后在其后追加 AutoJs6 的服务路径,最后将合并后的字符串写回系统设置。

方案二:显式指定多个服务

如果需要同时控制多个无障碍服务的状态,可以显式指定所有需要启用的服务,用冒号分隔:

adb -s 172.30.0.60 shell settings put secure enabled_accessibility_services "org.autojs.autojs6/org.autojs.autojs.core.accessibility.AccessibilityServiceUsher:li.songe.gkd/li.songe.gkd.service.A11yService"

这种方式适合在明确知道需要哪些服务的情况下使用,可以精确控制最终的无障碍服务组合。

最佳实践建议

  1. 操作前备份:在执行无障碍服务修改前,建议先备份当前设置:

    let currentServices = shizuku('settings get secure enabled_accessibility_services');
    
  2. 异常处理:添加适当的错误处理逻辑,确保在命令执行失败时能够恢复原有设置。

  3. 权限检查:确保 Shizuku 服务已正确授权,且 AutoJs6 已获得必要的系统权限。

  4. 多设备支持:如方案二所示,对于多设备环境,记得指定设备序列号。

技术原理深入

Android 系统的无障碍服务管理机制本质上是通过 Settings.Secure 数据库中的 enabled_accessibility_services 键值来控制的。这个键值存储的是所有已启用无障碍服务的组件名称(包名/服务类名)列表,各服务之间用冒号分隔。

当直接使用 settings put 命令写入新值时,系统不会进行任何合并操作,而是直接将新值完全替换旧值。这与 Linux 系统中许多配置文件的处理方式不同,开发者需要注意这种覆盖行为可能带来的副作用。

总结

在 AutoJs6 项目中使用 Shizuku 管理无障碍服务时,开发者应当充分理解 Android 系统对无障碍服务列表的管理机制。直接覆盖写入会导致其他无障碍服务被意外禁用,采用追加模式或显式指定所有需要服务的方案可以避免这个问题。正确的做法应该是在修改设置前先获取当前值,然后进行适当的合并操作,最后再写回系统,这样才能确保多个无障碍服务可以和谐共存。

【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 【免费下载链接】AutoJs6 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值