我想通过ADB编程方式控制Android设备。
因为我必须滚动列表,我试图通过类似的命令,以滚动:
adb shell input touchscreen swipe 935 500 789 500 1000
这工作,但问题是,Android的增加一扔/橡皮筋效果。因此,当刷卡完成后它仍然滚动远一点。但我需要scoll像素完美的,所以这种方法并不在我需要的方式工作。甚至当我增加了刷卡持续时间3000ms它滚动了一些更多的像素。
是否有可能一个简单的窍门,告诉ADB /我的设备“刷卡,但为了防止一扔效应释放手指之前500毫秒〜移动后,按住手指”?
我也试过是手动控制的事件。因此我跑adb getevent
,在设备上执行的滑动和收集的输出:
[...]
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000fb
/dev/input/event6: 0003 0030 0000000a
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000fa
/dev/input/event6: 0003 0030 0000000b
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0036 000001b6
/dev/input/event6: 0003 0030 0000000c
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000f9
/dev/input/event6: 0003 0030 0000000d
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000f8
/dev/input/event6: 0003 0030 0000000e
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0035 000000f7
/dev/input/event6: 0003 0030 0000000f
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 0030 00000000
/dev/input/event6: 0003 0039 ffffffff
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0003 002f 0000000c
/dev/input/event6: 0003 0039 0000000c
/dev/input/event6: 0003 0035 000000f7
/dev/input/event6: 0003 0036 000001b6
/dev/input/event6: 0000 0000 00000000
我想这应该告诉我,我的事件是/dev/input/event6
,我认为我需要的事件代码0035
,0036
和0039
。
于是,我周围一点点,像有一种方法上来:
adb shell sendevent /dev/input/event6 3 53 935
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 57 1
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 789
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 57 0
adb shell sendevent /dev/input/event6 0 0 0
这也同样here完成。但它并没有在所有的工作,没有什么设备上的改变。因为我不知道下一步该怎么尝试,或者如果我的做法是正确的,在所有的,我想问你,如果你能告诉我,我的错误是。
谢谢!
问题是sendevent
命令之间的延迟。如果检查sendevent
源代码,这是每次打开文件,并写入,然后关闭。加上两个adb shell
命令之间的延迟。这使得连续的SendEvent这么慢,你录制的内容是没有得到复制。
你所要做的就是让sendevent
source code,修改它采取尽可能多的,因为它可以指定参数和里面你打开文件一次,每次解析3个int
s和写,直到所有ARG游戏解析,关闭文件。你可以看到你记录什么是工作般的魅力。
默认的SendEvent
sendevent /dev/input/event1 3 47 0
sendevent /dev/input/event1 3 57 13578
sendevent /dev/input/event1 1 330 1
sendevent /dev/input/event1 1 325 1
修改的SendEvent
/data/local/tmp/mysendevent /dev/input/event1 3 47 0 3 57 13578 1 330 1 1 325 1
我做了这个相同的某个时候回来,你可以参考全面工作这里 - https://github.com/rils/ARP/wiki
耶 - 我终于想通了,该怎么办呢!
我写了一个小脚本转换adb shell getevent
为十进制值,并与来自this article知名的品牌替换代码。
这给了我输出是这样的:
/dev/input/event6: 3 - TRACKING_ID [4294967295]
/dev/input/event6: 0 - SYN_REPORT [0]
/dev/input/event6: 3 - 47 [0]
/dev/input/event6: 3 - POSITION_X [415]
/dev/input/event6: 3 - POSITION_Y [428]
/dev/input/event6: 3 - TOUCH_MAJOR [5]
/dev/input/event6: 3 - TRACKING_ID [0]
/dev/input/event6: 0 - SYN_REPORT [0]
然后,我能找出事件是如何工作的,并可以复制的行为。我只是需要改变X和Y坐标。
adb shell sendevent /dev/input/event6 3 57 88
adb shell sendevent /dev/input/event6 3 53 935
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 5
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 906
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 877
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 847
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 818
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 53 789
adb shell sendevent /dev/input/event6 3 54 500
adb shell sendevent /dev/input/event6 3 48 16
adb shell sendevent /dev/input/event6 0 0 0
adb shell sendevent /dev/input/event6 3 57 -1
adb shell sendevent /dev/input/event6 0 0 0