Android按键监听与模拟分析

    开篇先说些废话,提醒自己,因为每次都给自己找理由。在碰到并解决一些问题的时候完全可以记录下来,方便自己查看,也可以让碰到同样问题的人找到,免得再走些弯路,但是,老是以正在朝着目标迈进,时间紧,没法整理,其实完全没有必要;而且现在想想其中的曲折,都已经忘了。所以赶紧补上些。
    这篇主要介绍了些实现Android按键的监听与模拟的思路,自己只是部分实现了后面最简单快速的方式,其它方式有待进一步分析实践,但是要根据需要,不要盲目。同时,把一些碰到的问题也一同加上,供以后参考解决。自己的思路是在网上很多讨论中得到的想法,因此如果有足够的时间或者对其中部分很熟悉的话可以顺着去做。
    1.Android模拟键盘和键盘监听的一些调研 详解
    网址:http://www.bangchui.org/read.php?tid=11672
    (1)按键监听
    这篇帖子中针对按键的产生及响应作了简要分析,当然是在上层的,没有涉及到内核。结论是:“Android的按键产生的是一个KeyEvent,这个KeyEvent只能被最上层获得焦点窗口的activity和view得到,无法被其他进程获得,进程间的键盘监听是无法实现的。”但是其中提到了一个监听按键的思路,可以把自己的程序伪装成输入法,在记录按键后,再调用真正的输入法(或者集成到自己的程序里),这个对于输入法没有概念的人似乎需要花些时间来研究。
    (2)按键模拟
    帖子中提出一种可以实现的情况是在源码环境下调用IWindowManager来实现,我记得在一篇博文里也看到过说是源码环境下编译实现,但是真的测试使用不知道情况怎么样;帖子中提出的另一种方法还是接着上面的输入法方式;而后大部分篇幅介绍了用于测试的sendkeyevent等相关方法,但是记得好像只能针对指定应用程序。记得官网中说到的Monkey和monkeyrunner,也是有发送按键消息的,但是有限制。这里面的全面的按键模拟与监听的实现有待验证。
    2.Webkey
    一般常见的软件是Android手机远程控制PC,但是换个思路,PC远程登录手机呢?一旦登录,必然涉及到按键的模拟等操作。于是找到两个开源的软件一个是SmartDog Studio的Remote Control Add-on,从Android Market上看到他更新的还是不错的,但是始终没有找到它的源码能从哪里下载到,给定的网站可能是被墙了,我进不去。另一个是Webkey,个人使用了,获得的手机页面颜色不好,但是按键等操作确实可以实现远程控制,而且是可以直接通过浏览器上来完成,免去了装其它VNC软件了。简单查看了它的实现,不管其简单的httpserver,只关注模拟按键,发现其按键的实现是通过对"/dev/uinput"或"/dev/input/uinput"的写入操作来实现的。但是涉及到设备文件的创建,对Linux中按键的监听与模拟,因此对Linux熟悉的人可以尝试着去做,而且既然人家的能控制,那么这种方式应该肯定能实现的。其中有个问题是必须要有root权限,因为,底层的那些代码用JNI调用肯定权限不够的,因此人家应该是在Linux环境下利用NDK提供的交叉编译器编译好后,在手机中root权限下直接后台执行的。
   3.命令行监听与模拟
   上面两种方式算是一个从上层应用的角度和一个从底层Linux角度来做,那么应该就有折中的方案。一方面可以去看Monkey和monkeyrunner的实现方式寻找答案,另一方面在linux本身的命令行中寻找。是的,作为Shell中可以执行的命令getevent sendevent在这里起到了非常大的作用。文章《Android自动化测试之Shell脚本一——模拟触屏事件》算是做了个非常好的交代,而且《Android 【真机】与【模拟器】触摸屏事件的模拟差异分析》这篇文章很好的说明了一些问题。这样根据两者的结合,初步可以做到在shell下按键的监听与模拟,当然是需要root权限的。但是这里面又涉及到如果直接做成软件,在运行环境中的执行,对于真机和模拟器又会有一系列问题,我只能说真机的问题解决简单一些,模拟器的似乎有些莫名其妙,我只是部分实现了这一过程,对于详细的做法,真正需要的人再研究和讨论吧,免得被人做成了木马,就。。。。。。
    最后还要提的是另一种想法,就是有说Android的执行权限有问题,如果直接编写Java代码或者C代码可以绕过权限,不过我不知道说这些的人具体测试的情况怎么样,但是按照我的理解,对于那些不需要root权限的权限,似乎影响不大,你绕过了也无所谓,人家只是为了方便给用户提醒,但是真的需要root权限的,你应该绕不过去吧,因为至少你的uid跑不了,难道也在源码下用和系统进程相同的?

    由于时间仓促,我没有深入的去分析linux下按键的监听与模拟,如果在Linux可以的话,那在Android上(实际还是Linux上)应该也是可以的。好了,写到这里,有问题的可以留言讨论了。

上面提到的文章链接:

[1]Android模拟键盘和键盘监听的一些调研 详解 http://www.bangchui.org/read.php?tid=11672
[2]Android自动化测试之Shell脚本一——模拟触屏事件 http://guolin.guosfamily.com/2012/02/15/android-automated-test-by-shell-touch-event/
[3]Android 【真机】与【模拟器】触摸屏事件的模拟差异分析 http://blog.csdn.net/yiyaaixuexi/article/details/6574001

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值