想实现在Android平台下对用户的按键和触屏操作的监听和记录,但是没找到什么解决方案。如果android支持类似Windows的hook机制一样的东东就好了。
    请教了几个大哥,得出的结论是,在应用层实现这个监听,貌似只能从输入法的方向入手(android.app.KeyguardManager类),但是这个类的功能也太少了,总共就一个嵌套类,一个接口,加三个方法,怎么实现监听啊?
    想请教下,有么有做过类似工具的大哥们,给点资料?

解决方案 »

  1.   

    那干脆就imp onTouchListener,或者onKeyListener
      

  2.   

    那干脆就imp onTouchListener,或者onKeyListener何解?主要是不懂 imp什么意思?
      

  3.   

    饿, 1楼误解我的意思了。
        我需要实现的是一个测试工具,工具的目的是记录测试人员在被测试的AP上进行的操作,并生成测试脚本,最后执行测试脚本。
        所以我是不可能拥有自己的Activity,至少在被测的AP运行的时候,我的Activity不可能在前台。所以,我需要一个service来监听所有的用户操作(思路一)。打个比方的话,就像是Windows的键盘和鼠标钩子一样的东西。
        如果使用service无法实现的话,在将手机和电脑用串口线连接起来,手机在接受测试人员操作的时候,将消息同步发送给电脑也是可以接受的方案(思路二)。
        求以上两种思路的解决方案,100分不够的话,我可以加到500分。
      

  4.   

    如果你有root权限,可以操作底层的  /dev/xxx 按键,鼠标(触屏)都可以的,sdk是无法获取全局的。有hook这类的,只不过不越狱没权限。几个不错的linux rootkit移植几个,可以跑的
      

  5.   

    root权限虽然麻烦,但是都还有解决办法。
    但是小弟还是新手,关于如何操作底层的/dev/xxx按键,没什么概念。
    还有rootkit之类,也还是一窍不通。能提供详细点的资料么?有教程就最好了。
      

  6.   

    啊,那你不适合搞这些了,哈哈,资料嘛,先学习linux内核相关的吧,android建立在linux之上,本身理论上抛去ui,可以说过去搞linux使用c开发的,基本上都会点吧你要。
      

  7.   

        恩,我原先实习的时候,做的是Windows方面的,最近因为项目需要开始转Android,的确有很多需要学习的。
      

  8.   

    我只用过root权限来卸载系统的应用,此时会用到rootkey 并且需要 一个su文件
    ..
      

  9.   

        查了一些资料,应该可以通过JNI调用实现对于/dev/input/event0的读取,已达到监听效果。
         不过不知道咋搞呢,搜下相关的资料。
      

  10.   

        经过几天的努力,现在我的程序已经能够修改系统时间了,这样也算是获得root权限了吧?
        但是现在的问题是event0_fd = open("/dev/input/event0", O_RDONLY)总是失败,
        event0_fd总是小于0,不知道问题出在哪里,希望有哪位好心的大哥指点下。
      

  11.   

        修改系统时间,我使用了android.uid.system权限,参考了http://blog.csdn.net/ccwwff/archive/2010/08/14/5811843.aspx
      

  12.   

    只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key,就是上面第二个方法提到的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名
      

  13.   

        恩,签名我也是用signapk重新签过的,也能成功的修改系统时间,但是貌似系统权限还是不足以让我打开设备文件,所以想请教你提到的rootkey和su文件是怎么搞的。
      

  14.   

    呵呵,继续努力啊,开窍了,哈哈。有关系统的签名,其实吧,我是想问问你是自己产机器还是开发应用兼容各个机器啊,如果是后者你还是休息吧,不然就乱套了,我的rootkit还等待发布呢,可惜Google它没有微软像wince 6.5以前这么傻
      

  15.   

        恩,系统是我们公司自己的,不需要兼容别的机器。
         在确定的机器上如何获取root权限呢?
      

  16.   

    你可以自己建立一个监听用户动作的广播接收器,只要用户点击或触摸操作,就广播一个INTENT,这个intent可以自己带action,然后把这个需要监听的action加到广播接收器里的intent-filter里就可以了,你可以在广播接收器里的onReceive方法里记录用户的动作,可以存储到文件里或数据库里,都可以。
      

  17.   

       android会将用户动作进行广播么?之前查资料的时候,的确有人说做广播接收器,但是资料不全,我后来就放弃了
      

  18.   

    如果系统是你们公司自己的 那应该自己会有一个root key啊?你们是怎么build的?
      

  19.   

        不知道唉,研发工作的话,貌似苏州那边的已经开始了,但是杭州这边的上个项目还在收尾,android还在学习中。
        恩,底层开发不在我们这边,我们这边只管AP的。
      

  20.   

    噢 我们是总部给我们给的rootkey 
      

  21.   

        那在标准的anroid系统中,rootkey在哪个文件夹下呢?还有哪个su文件应该如何处理呢?
         网上找了一堆的资料,全部都是靠刷机实现root权限的,郁闷。
      

  22.   

        恩,不通过刷机的话,暂时没找到方法给AP以ROOT权限。所以决定放弃之前的思路。
         在adb命令中,有一条getevent命令,可以获取/dev/input/event0中的内容,所以目前决定尝试将ADB封装到应用程序中,来实现键盘记录。
         所以此贴先结贴。在封装过程中遇到问题,我再开新贴。
      

  23.   

        adb shell getevent