android远程控制(一)---从PC端写数据到android系统驱动让android系统

技术难点1--- 第一步:

从PC端写数据到android系统驱动让android系统做出反应

2014年5月25日星期日 鏖战了大半天,终于迈出了第一步

实现步骤:

1、手机通过数据线连上PC

2、打开win7的cmd终端

3、在终端打开android调试工具 输入命令adb shell 效果如下:

android远程控制(一)---从PC端写数据到android系统驱动让android系统_第1张图片


4、获取手机(我自己的手机)的驱动文件的输出,在终端输入getevent,然后随便在手机上操作,会看到终端很多输出结果,

比如 我在我的手机主页上按了下微信图标,输出结果如下图所示:android远程控制(一)---从PC端写数据到android系统驱动让android系统_第2张图片

我的手机屏幕截图如下:

android远程控制(一)---从PC端写数据到android系统驱动让android系统_第3张图片


终端输出的代码如下:

/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000047
/dev/input/event4: 0003 0036 000001f5
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000046
/dev/input/event4: 0003 0036 000001f5
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000046
/dev/input/event4: 0003 0036 000001f4
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000046
/dev/input/event4: 0003 0036 000001f4
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0001 014a 00000000
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000

这些指令都同一个格式,device   type  code value,

设备号,一般是event0~9;type是指响应的事件类型,比如鼠标键盘事件;code是指事件的更细的分类,比如按钮触摸之类。value就是具体的值了,比如X坐标的值,Y坐标的值,或者键盘按下弹起的值。

这段代码的解释需要先把里面的十六进制转成10进制,我写了个小工具,java程序,

下载地址http://download.csdn.net/detail/diaoliangwang/7399627,不用资源分的,

可以直接将这种类型的输出结果中的十六进制转成十进制输出,关键是

转成十进制才能更好弄明白每一行的含义,而且从PC端注入代码到驱动程序的时候也要用十进制的,输出结果如下:

我写的java转换工具在每行结果前面都加了指令sendevent ,主要是为了重新注入方便,直接复制就可以了。

 sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 71
sendevent /dev/input/event4 3 54 501
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 70
sendevent /dev/input/event4 3 54 501
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 70
sendevent /dev/input/event4 3 54 500
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 3 48 1
sendevent /dev/input/event4 3 53 70
sendevent /dev/input/event4 3 54 500
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 2 0
sendevent /dev/input/event4 0 0 0

好了 下面我就解释下这段代码的含义:

sendevent /dev/input/event4 0 0 0--------事件分割,避免和之前的事件冲突    
sendevent /dev/input/event4 1 330 1------1在linux中代表EV_KEY  330即0x14a在linux中代表 BTN_TOUCH  1代表按下
sendevent /dev/input/event4 3 53 89------我手机上的X坐标 这个值可以变化 但是不要超出图标的点击范围
sendevent /dev/input/event4 3 54 899-----我手机上的Y坐标 这个值可以变化 但是不要超出图标的点击范围
sendevent /dev/input/event4 0 0 0--------事件分割
sendevent /dev/input/event4 1 330 0------EV_KEY  BTN_TOUCH  0代表弹起
sendevent /dev/input/event4 0 0 0--------事件分割
sendevent /dev/input/event4 0 0 0--------事件分割

sendevent /dev/input/event4 3 48 1 没有用 删除不影响
sendevent /dev/input/event4 0 2 0 没有用 应该也是事件分割 其他人的手机上没有这一行输出 删除不影响

上述含义的发现,对我来讲是个很痛苦而且很有意义的过程,具体的发现过程我写在另一个博客里了,有兴趣可以看看。

链接如下:http://blog.csdn.net/diaoliangwang/article/details/26977603

这下基本就了解了上述代码的含义了,其实精简一下上述代码,如下

sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 71
sendevent /dev/input/event4 3 54 501
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0

就这几行,其他的代码是android系统自己加上去的,其实好好读读那几十行代码,发现有好几段是重复的,主要是在重复发送点击的坐标的x,y的值。

然后,再重新打开一个终端,然后输入adb shell, 然后把上面经过我的java工具转换的输出或者我上面精简过的输出,复制到终端里运行,

手机就会自动进行启动微信,前提是,手机当前显示的界面也要在主页。注意一个问题,上面的这些代码是我的手机的输出,放到其他手机上基本是不能用的,

我的手机是山寨智能机,但是基本测试没有问题,如果你要自己测试用,要用自己的手机测试输出。





你可能感兴趣的:(Android,java)