- 源代码名称:minitouch
- 源代码网址:http://www.github.com/openstf/minitouch
- minitouch源代码文档
- minitouch源代码下载
Git URL:
git://www.github.com/openstf/minitouch.git
Git Clone代码到本地:
git clone http://www.github.com/openstf/minitouch
Subversion代码到本地:
$ svn co --depth empty http://www.github.com/openstf/minitouch
Checked out revision 1.
$ cd repo
$ svn up trunk
minitouchMinitouch提供了套接字接口,用于触发Android设备上的多点触控事件和手势。 如果在至少 SDK 25和更低版本上启动,但任何版本都应该能工作,那么它在不使用 root的情况下工作,如果。 唯一的例外是( Android Wear ) 20,它需要 root。 我们测试的最低SDK级别是 10 ( 例如。 Android 2.3.3 )。
这种方法与HTML5的多点触摸事件非常配合,而且与Android的工具不同,它允许你访问整个屏幕,并使用。
建筑
建筑物需要 NDK,而且至少可以与NDK版本 10 ( 2014 ) 一起工作。 注意NDK不再支持任何 below androidsdk级别 14,这意味着二进制文件可能或者可能无法在旧设备上工作( 比如 )。 Android 2.3 )
我们包括 libevdev 作为一个Git模块,所以首先要确定你已经获取了它。
git submodule init
git submodule update
那么这只是一个调用 ndk-build
的问题。
ndk-build
你现在应该可以在 ./libs
中使用二进制文件了。
运行
你将需要先构建一个。 然后,可以使用 include run.sh 脚本在设备上运行正确的二进制文件。 如果连接了多个设备,请在运行脚本之前设置 ANDROID_SERIAL
。
要手动运行,必须首先确定你的设备支持哪些 ABI:
ABI=$(adb shell getprop ro.product.cpu.abi | tr -d 'r')
注意,作为 Android shell 总是以CRLF结尾,你必须删除像 上面 这样的CR,否则其他命令将不能正常工作。
注意如果已经连接多个设备,设置会使事情变得更加简单,因为每次都不需要指定 -s <serial>
选项。
现在,将适当的二进制文件推送到设备:
adb push libs/$ABI/minitouch/data/local/tmp/
注意,对于 SDK <,你必须使用没有 PIE支持的minitouch-nopie
可执行文件。 检查 run.sh 以获得脚本示例。
此时,检查使用情况可能会很有用:
adb shell/data/local/tmp/minitouch -h
当前,这应该是沿着以下行的内容:
Usage:/data/local/tmp/minitouch [-h] [-d <device>] [-n <name>] [-v] [-i] [-f <file>]
-d <device>: Use the given touch device. Otherwise autodetect.
-n <name>: Change the name of of the abtract unix domain socket. (minitouch)
-v: Verbose output.
-i: Uses STDIN and doesn't start socket.
-f <file>: Runs a file with a list of commands, doesn't start socket.
-h: Show help.
因此,我们可以简单地运行二进制文件,而不用任何选项,它会尝试检测合适的设备并开始侦听抽象的unix域套接字。 或者,可以使用 -i
选项和输入命令直接启动 minitouch,或者通过 -f <file>
从文件中读取命令。
adb shell/data/local/tmp/minitouch
如果你选择使用套接字,则需要分别连接它。 除非出现错误消息,而且二进制文件退出,我们现在应该在设备上打开一个服务器。 现在我们只需要创建一个本地转发,这样我们就可以连接它。
adb forward tcp:1111 localabstract:minitouch
现在你可以使用本地端口连接到套接字。 注意,目前仅有一个连接,每次仅有一个连接。 这主要是因为在重新引导( 顺便说一下,由于没有响应的屏幕,你最可以能需要使用 adb reboot
。) 之前,提交中断的事件流,混淆驱动程序,可能会冻结设备。 好了,让我们连接。
nc localhost 1111
下面的部分解释了如何与minitouch交互。
用法
假设你现在有到minitouch套接字的开放连接,或者在 stdin/文件模式下运行 minitouch。 如果没有,请按照上面的指令。
minitouch协议基于lf分离行。 每一行都是一个单独的命令,每一行都以一个指定命令类型的ASCII字母开始。 空格分隔命令特定参数然后跟随。
当你首先打开到套接字的连接时,你将收到一个 header,你将需要从套接字读取元数据。 除此之外,不会有任何的React。
从插槽读取
协议版本。这一行保证在输出中首先出现。 参数布局可能在版本之间更改,因此你可能希望检查代码是否支持这里版本。
^ <max-contacts> <max-x> <max-y> <max-pressure>
示例输出: ^ 2 320 480 255
这将给出参数的上限,如触摸设备所报告的。 如果使用较大的值,很可能会混淆驱动程序( 可能会冻结屏幕需要重启),或者该值将被忽略。
最重要的是要注意,最大的X 和Y 坐标可以能,但通常不是,MATCH 显示大小。 如果需要,你需要将显示坐标映射到触摸坐标,可以能是使用屏幕坐标的百分比。
这是minitouch进程的pid。 如果要终止进程,则为有用。
可以写入插槽
提交当前更改的触摸集,使它的在屏幕上播放。 请注意,在你提交之前,不会出现任何可见的。
提交并不需要列出所有活动联系人。 从以前的状态更改足够。
多触点接触同样适用。 联系人可以在单独的提交中移动,甚至可以在相同的提交中移动。 如果一个联系人移动,则不需要其他。
单个提交中的触摸顺序并不重要。 例如你可以在联系人 0之前列出联系人 5.
但是注意,对于同一行,不能有一个上的d
。m
或者 u
插件。
Attemps通过创建适当的u
事件并提交它们来重置当前的触摸集。 由于有无效的事件序列可能会导致屏幕冻结,如果你对事件的完整性有任何疑问,你应该调用它。 例如同一联系人的两个 touchstart
事件非常可疑,很可能意味着你丢失了 touchend
事件。
我们试图自动丢弃out-of-order事件,但有时它是不够的。
如果屏幕冻结,你必须重新启动设备。 小心使用这将不会发生。
d <contact> <x> <y> <pressure>
示例输入: d 0 10 10 50
在 <x>,<y>
上调度联系人 <contact>
,并为下一次提交提供 <pressure>
压力。
不能有一个上的d
。m
或者 u
用于同一 <contact>
。
m <contact> <x> <y> <pressure>
示例输入: m 0 10 10 50
在下一次提交时,在 <x>,<y>
上安排接触 <contact>
的触摸移动,以及 <pressure>
压力。
不能有一个上的d
。m
或者 u
用于同一 <contact>
。
调度联系人 <contact>
上的联系人。 如果需要首先移动联系人,请使用 m
和 u
的组合,以提交的方式分隔。
不能有一个上的d
。m
或者 u
用于同一 <contact>
。
立即等待 <ms>
毫秒。 将不提交队列或者执行其他操作。
示例
用单个触点按住 50压力的( 10,10 )。
d 0 10 10 50
c
u 0
c
使用单个触点在( 10,10 ) 上长按 50个压力。
d 0 10 10 50
c
<wait in your own code>
u 0
c
点击( 10,10 ) 和( 20,20 ) 同时使用 50个接点进行压力。
d 0 10 10 50
d 1 20 20 50
c
u 0
u 1
c
点击( 10,10 ),保持按下,然后点击( 20,20 ),然后按下,然后释放第一个接触,最后释放第二个接触。
d 0 10 10 50
c
<wait in your own code>
d 1 20 20 50
c
<wait in your own code>
u 0
c
<wait in your own code>
u 1
c
使用单个联系人将( 0,0 ) 从滑动到( 100,0 )。 你将需要在自己代码中提交之间等待,以使它的降低。
d 0 0 0 50
c
m 0 20 0 50
c
m 0 40 0 50
c
m 0 60 0 50
c
m 0 80 0 50
c
m 0 100 0 50
c
u 0
c
从( 0,100 ) 到( 50,50 ),( 100,0 ) 到( 50,50 )的两个联系人。 你将需要在自己代码中提交之间等待,以使它的降低。
d 0 0 100 50
d 1 100 0 50
c
m 0 10 90 50
m 1 90 10 50
c
m 0 20 80 50
m 1 80 20 50
c
m 0 20 80 50
m 1 80 20 50
c
m 0 30 70 50
m 1 70 30 50
c
m 0 40 60 50
m 1 60 40 50
c
m 0 50 50 50
m 1 50 50 50
c
u 0
u 1
c
同样的压缩,但有更多的混乱( 自然自然) 排序。
d 1 100 0 50
c
d 0 0 100 50
c
m 1 90 10 50
m 0 10 90 50
c
m 0 20 80 50
c
m 1 80 20 50
c
m 0 20 80 50
m 1 80 20 50
c
m 0 30 70 50
c
m 1 70 30 50
c
m 1 60 40 50
c
m 0 40 60 50
c
m 0 50 50 50
m 1 50 50 50
c
u 0
c
u 1
c