STF-minitouch的使用
来源:互联网 发布:国外网络电视在线直播 编辑:程序博客网 时间:2024/06/06 00:48
我们经常会遇到这样子的情况,需要演示一些手机上的一些界面的时候。不能够把手机上的影像投影到电脑上,同时在电脑上操作手机。也可能是我了解的比较少吧。
最近在论坛上看到了 [STF 框架之 minitouch 工具] (https://testerhome.com/topics/4400) 其实里面已经介绍的很详细了,只是使用C#的来实现的。对于c#确实不太熟悉,所以就拿了 minicap_java DoctorQ使用java基于minicap实现的一个GUI展示Android手机屏幕的一个工具来继续完善它,使它能够支持一些鼠标点击操作。
介绍
minitouch提供了一个socket接口用来出来在Android设备上的多点触摸事件以及手势。它能够支持api 10以上的设备且不需要通过root. 但是根据不同的cpu的ABI需要使用不同的minitouch。
使用
首先我们需要找出你的设备所支持的ABI
ABI=$(adb shell getprop ro.product.cpu.abi | tr -d '\r')
注意:如果你有多台设备连接的情况下并且你没有设置$ANDROID_SERIAL的话,你需要去指定设备
-s <serial>
推送对应的文件到设备上。
adb push libs/$ABI/minitouch /data/local/tmp/
注意如果你的SDK<16的情况下,你需要使用minitouch-nopie
当然你还需要更改下minitouch的执行权限。
chmod 777 /data/local/tmp/minitouch
并且通过下面的命令来判断是否已经操作成功了。
adb shell /data/local/tmp/minitouch -h
下来我们可以直接通过
adb shell /data/local/tmp/minitouch
来执行,这个时候设备就开始监听了。这个时候除非出现错误的消息或者说程序退出,我们需要进行端口转发 通过如下命令:
adb forward tcp:1111 localabstract:minitouch
- 现在我们就需要去连接对应的端口,获取数据了。
提示文档里面给的是通过nc localhost 1111
,但是我们肯定不是这样子的,我们需要自己去创建一个socket来进行连接。获取socket对应的数据。
socket命令
d <contact> <x> <y> <pressure>
例如:d 0 10 10 50
压力值50 在点 10,10 使用一个触点按下。
m <contact> <x> <y> <pressure>
例如: m 0 10 10 50
压力值为50在 10,10滑动。
u <contact>
例如:u 0
手势抬起
实现
这里我们只说明鼠标的一些事件的实现。
mp.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { System.out.println("i press"+e.getX()+","+e.getY()); Point point = pointConvert(e.getPoint()); if (outputStream != null) { String command = String.format("d 0 %s %s 50\n", (int)point.getX(), (int)point.getY()); executeTouch(command); } } @Override public void mouseReleased(MouseEvent e) { System.out.println("i release"); if (outputStream != null) { String command = "u 0\n"; executeTouch(command); } } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } }); mp.addMouseMotionListener(new MouseMotionListener() { @Override public void mouseDragged(MouseEvent e) { System.out.println(e.getPoint().getX()+","+e.getPoint().getY()); Point point = pointConvert(e.getPoint()); if (outputStream != null) { String command = String.format("m 0 %s %s 50\n", (int)point.getX(), (int)point.getY()); executeTouch(command); } } @Override public void mouseMoved(MouseEvent e) { }});private Point pointConvert(Point point) { Point realpoint = new Point((int)((point.getX()*1.0 / width) * banner.getMaxX()) , (int)((point.getY()*1.0 /height) * banner.getMaxY()) ); return realpoint; } private void executeTouch(String command) { if (outputStream != null) { try { System.out.println("command" + command); outputStream.write(command.getBytes()); outputStream.flush(); String endCommand = "c\n"; outputStream.write(endCommand.getBytes()); outputStream.flush(); } catch (IOException e) { e.printStackTrace(); } } }
minicapDemo具体可参考代码。
参考文档
STF 框架之 minicap 工具
STF 框架之 minitouch 工具
感想
上面的项目基本上都没改什么,只是简单的加了几句代码而已。还是要感谢几个大神。
- STF-minitouch的使用
- STF 使用
- STF的快速搭建以及使用
- stf使用经验--在windows平台连接Mac上stf的过程
- STF -- 使修改的代码生效
- CentOS 7 下STF的安装
- CentOS 7 下STF的安装
- minitouch出现10053问题
- Mac下使用docker搭建STF(踩坑失败)
- Linux下使用docker搭建STF(踩坑成功)
- 关于speedtree的spt文件和stf文件
- STF 连接手机出现 No Permission 的错误
- 初探STF
- stf在Linux上的安装过程(实践中一步一步操作总结的)
- WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行
- WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行
- WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行(MAC OS)
- WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行
- AC自动机+矩阵快速幂变形 CCF201509-5 最佳文章
- 终于有SpringMvc与Struts2的对比啦
- NSNotificationCenter 的详细说明
- NSDate 、 NSString转换
- g++ 和 pkg-config 编译opencv项目
- STF-minitouch的使用
- linux中的问题
- Snackbar的基本使用
- mboot 添加编译开关或编译选项
- perl 对象 bless 引用
- Date&Time
- 零基础写Java知乎爬虫之进阶篇
- PHP基础知识总结
- HashMap源代码