adb input tap执行速度过慢,非Root安卓设备如何实现高效模拟点击?
无Root环境下ADB快速点击落地实现方案
方案1:使用uiautomator2框架(落地成本最低,优先推荐)
- 底层基于谷歌原生测试服务实现事件注入,无需Root权限,点击延迟普遍在10ms以内,比
input命令快10~30倍 - 配置流程:
- 电脑端执行
pip install uiautomator2安装依赖 - 手机开启USB调试后连接电脑,执行
python -m uiautomator2 init,工具会自动给设备安装对应服务端,全程不需要Root操作
- 电脑端执行
- 原有代码可以直接替换,示例如下:
import uiautomator2 as u2 # USB连接直接用u2.connect(),多设备或无线连接填对应设备序列号 d = u2.connect() if detect_tile(c1): d.click(90, 943)
方案2:基于scrcpy控制接口实现(适合需要同步投屏的场景)
- 底层复用scrcpy的低延迟事件注入通道,无需Root,性能和scrcpy手动操作延迟一致
- 可以调用
pyscrcpy封装好的控制接口,不用自己实现原始字节解析逻辑,示例代码片段:
from scrcpy import Client def frame_callback(frame): # 插入原有图像识别逻辑 if detect_tile(c1): client.control.tap(x=90, y=943) client = Client(max_fps=60) client.add_listener("frame", frame_callback) client.start()
方案3:预存sendevent指令脚本(适合固定坐标高频点击场景)
- 无需Root,比单次调用
input命令延迟低60%以上 - 操作流程:
- adb shell中执行
getevent -l,手动点击目标坐标,记录对应的输入事件序列 - 将事件序列转换为对应的
sendevent指令,拼接为sh脚本,推送到手机/data/local/tmp目录(该目录无Root也有执行权限) - 后续点击直接执行
device.shell("sh /data/local/tmp/tap_90_943.sh")即可
- adb shell中执行
通用注意事项
- 小米、OPPO、vivo等国产机型需要额外开启「USB调试(安全设置)」权限,否则无法注入点击事件
- 高版本安卓系统已不支持无Root使用minitouch类方案,无需尝试
- 所有方案均要求保持USB调试处于开启状态
内容的提问来源于stack exchange,提问作者ScudBlood
相关产品推荐
相关产品推荐

