在 python 中使用 sendevent 使用 adb 进行复杂滑动?

Complex swipes with adb using sendevent in python?

首先我要说我是 adb 的新手。

也就是说,我正在尝试使用 adb 和 python 来模拟对我的 android 设备的复杂滑动。

我到处寻找某种文档或示例,但找不到。我知道这里有人问过类似的问题,但 none 的答案提供了实际示例。

在我的程序中,我使用 device.shell("input touchscreen swipe 540 1150 750 1250 500")(使用 pure-python-adb)进行线性滑动,并且效果很好,但是我不知道如何进行滑动a到b再从b到c不用抬起“虚拟手指”。

我发现了sendevent,但我完全不明白。我所知道的是它需要 4 个参数。

有人能确切地告诉我如何产生从 a(200,200) 到 b(200,300) 再到 c(300,300) 的滑动吗?

非常感谢任何帮助。 (注意 - 我在 Windows 10)

您可以使用 sendevent 命令实现此目的。 (在 post 中我解释了它是如何工作的。如果你不在乎,你可以只使用我制作的 this python 文件。导入 AdbInput class 你基本上是完成)

1º。在您的 adb 终端上获得 root 访问权限:

如果您想使用 sendevent 命令,您将需要对您的 phone 进行 root(我不会解释如何对您的 phone 进行 root)。 root 之后,进入你的终端,在你的 phone 已经连接的情况下,写:adb shell su。您的 phone 上应该会出现一个弹出窗口,要求获得 root 访问权限。允许它,现在您将看到您的 shell 显示 root@[your phone] 而不是来自 ´shell@[您的 phone]´.

2º。查找触摸屏事件。

在 adb 终端(无论是否为 root 都无所谓)键入“getevent”并在 运行 时触摸 phone 的屏幕。应该会出现很多文本和数字。我们正在搜索消息的第一部分,在我的例子中:'/dev/input/event2'(你的将非常相似)。

3º。使用 sendevent 发送触摸事件。

现在,您需要复制从“getevent”命令获得的消息来创建一个新的 touchevent。我将粘贴实现从 (200, 200) 到 (200, 300) 再到 (300, 300) 滑动所需的命令,然后解释它们。 (将“事件~”替换为第 2 步中获得的事件)

device.shell("sendevent /dev/input/event~ 1 330 1")
device.shell("sendevent /dev/input/event~ 3 57 10")
device.shell("sendevent /dev/input/event~ 3 53 200")
device.shell("sendevent /dev/input/event~ 3 54 200")
device.shell("sendevent /dev/input/event~ 0 0 0")
device.shell("sendevent /dev/input/event~ 3 53 200")
device.shell("sendevent /dev/input/event~ 3 54 300")
device.shell("sendevent /dev/input/event~ 0 0 0")
device.shell("sendevent /dev/input/event~ 3 53 300")
device.shell("sendevent /dev/input/event~ 3 54 300")
device.shell("sendevent /dev/input/event~ 0 0 0")
device.shell("sendevent /dev/input/event~ 1 330 0")
device.shell("sendevent /dev/input/event~ 0 0 0")

前两个事件“放下手指”(第一个指定屏幕已被触摸,第二个指定触摸的压力)。第三个和第四个事件设置了触摸的x和y位置(都是200,你可以改成200来试验)。在每组命令之后需要一个“0 0 0”。接下来的两个设置另一个滑动点,然后是“0 0 0”。下一个发生在接下来的三个中。倒数第二个命令“抬起”手指,最后一个命令是“0 0 0”事件。

因此,如果您只想点击 (100, 230),您可以输入以下内容:

device.shell("sendevent /dev/input/event~ 1 330 1")     # Puts down finger
device.shell("sendevent /dev/input/event~ 3 57 10")     # Sets pressure
device.shell("sendevent /dev/input/event~ 3 53 100")    # Sets X to 100
device.shell("sendevent /dev/input/event~ 3 54 230")    # Sets Y to 230
device.shell("sendevent /dev/input/event~ 0 0 0")       # "0 0 0" (its called a SYN_REPORT)
device.shell("sendevent /dev/input/event~ 1 330 0")     # Lift up finger
device.shell("sendevent /dev/input/event~ 0 0 0")       # "0 0 0"

就是这样!!大功告成!!