android 实现按键精灵

来源:互联网 发布:软件架构总结 二 编辑:程序博客网 时间:2024/04/29 10:52

转载文章请注明出处:http://blog.csdn.net/dangxw_/article/details/17960571

程序经常需要调试,需要程序自动按键,或者某些繁琐操作,比如游戏外挂,需要按键精灵来完成。

android 提供给开发者发送模拟按键的类Instrumentation:

public class

Instrumentation

extends Object
java.lang.Object   ↳android.app.InstrumentationKnown Direct Subclasses

可以模拟发送很多事件(这些方法写在thread类里,所以部分带有thread的sleep方法):

发送back事件:

private void back(){inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);}
发送enter事件:(在keyevent中有很多按键码,该方法可以发送任何按键的事件)

private void enter() throws InterruptedException
{inst.sendKeyDownUpSync(KeyEvent.KEYCODE_NUMPAD_ENTER);sleep(500);}

根据坐标点发送点击事件:

private void click(int x ,int y) throws InterruptedException{inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0));sleep(500);inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0));}

根据坐标发送长按事件:

private  void longClick(int x, int y) throws InterruptedException{inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0));sleep(2000);inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0));}

发送向下事件:

private void move() throws InterruptedException{inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);sleep(500);inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);sleep(500);}
发送move移动事件:

其实我感觉还是应该发送坐标点事件,只是把down和up之间发送部分move但是我实现起来却没有达到我想要移动的距离的效果,不贴出代码了,有点错误,期待阅读者的意见

但是这些代码的运行,需要给出

<uses-permission android:name = "android.permission.INJECT_EVENTS"/>

权限。

而且需要系统权限:android:sharedUserId="android.uid.system"

另外使用的手机必须root ,还要获取系统签名。

获取系统签名的具体步骤明天写吧。

写了一个demo 程序,传递一个简单的点击事件,这种方法可以实现跨进程点击,就是可以在后台发送点击事件,点击其他软件的组件。

demo下载地址:http://download.csdn.net/detail/dangxw_/7005525

---------------------------------------------------------------------------------------------------------------------分割线

看到自己的资源被喷了,才发现系统签名过程一直没有更新。当时是因为闲的没事而且csdn上没有了下载积分才记录下来这个虚拟按键过程的,最近一直比较忙,而且下班后住的地方没有网,所以一直没有写完。总之不好意思。

下载完那个demo之后导入,然后导出未签名的apk,点击项目,右键>android tools>Export unsigned application package.

然后下载签名工具,http://download.csdn.net/detail/dangxw_/7106645 里面自带的签名是4.3的好像,具体记不清了。

如果想要换个系统版本的签名,直接替换掉 platform.x509.pem,platform.pk8这两个文件就行了。

下载这两个文件的步骤详见:http://blog.sina.com.cn/s/blog_a72ec20c0101d7cx.html

那两个签名的路径为:build/target/product/security

1 0
原创粉丝点击