市面上有一款android的按键精灵,他是基于什么原理实现的实现

作者&投稿:营鹏 (若有异议请与网页底部的电邮联系)
android怎么实现后台对按键事件的监控~

  为了实现键盘的监控,从新开发一个输入法是不现实的,一般的操作就是在系统的输入法机制中添加接口回调。我们知道,再应用程序中拿到按键的回调一般是监听onKeyDown的接口,如下所示:
  public boolean onKeyDown(int keyCode, KeyEvent event)
  开发者就可以根据回调方法中的参数, keyCode与KeyEvent来判断具体事件。但是,由于事件的回调机制在其的沙箱中运行,在其他应用中是无法拿到当前应用事件回调的。
  那么我们就从上到下,具体的看看事件的传递机制。如下图所示,用户点击后,软键盘或物理按键的输入驱动就会产生一个中断,且向/dev/input/event*中写入一个相应的信号量。Android操作系统则会循环的读取其中的事件,再分发给WindowManagerServer。由WindowManagerServer根据事件的来源分发到各个不同的ViewGroup与View中,从而产生不同的OnClick、OnKeyDown和OnTouch等事件。


  这个时候很自然的想到,黑客们希望做键盘监控,一定会向Linux底层增加自定义的事件。这里我们使用的是Linux中的getevent获得/dev/input/eventX设备汇报的事件,这个命令还会输出所有event设备的基本信息。包括触屏、按键、耳机插入等等。其基本用法如下:
  Usage: getevent [-t] [-n] [-sswitchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device] -t: show time stamps -n: don't print newlines -s: print switch states for given bits -S: print all switch states -v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32,props=64) -d: show HID descriptor, if available -p: show possible events (errs, dev, name, pos. events) -i: show all device info and possible events -l: label event types and names in plain text -q: quiet (clear verbosity mask) -c: print given number of events then exit -r: print rate events are received
  键入getevent后,我们能够看到设备中的一些列输入硬件驱动信息,同样下面会出现很多输入指令信号,通常情况下,这些信号量都在刷屏,如下图所示:

  这些信号量的表示我们无法直接看懂,输入getevent –l加入Label我们能够看到一些添加的标签,如下所示:


  其实这些Lable已经在其input.h头文件中定义好,其中type的定义如下:
  /* * Event types */ #define EV_SYN 0x00 #define EV_KEY 0x01 #define EV_REL 0x02 #define EV_ABS 0x03 #define EV_MSC 0x04 #define EV_SW 0x05 #define EV_LED 0x11 #define EV_SND 0x12 #define EV_REP 0x14 #define EV_FF 0x15 #define EV_PWR 0x16 #define EV_FF_STATUS 0x17 #define EV_MAX 0x1f #define EV_CNT (EV_MAX+1)
  一般来说,常用的是EV_KEY、EV_REL、EV_ABS、EV_SYN,分别对应键盘按键、相对坐标、绝对坐标、同步事件。EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型。

http://dattach.gfan.com/down.php?aid=6Kem5pG457K%2B54G1My4xLjDmnIDmlrDniYjnoLTop6MuYXBrfDIwMTMwOS8wOC8xMTU1NTVycXN0ZHNxMGRxdmR0czV0LmF0dGFjaHwxMzg0MjM0MjY4fDcwNzcxODQ%3D&securykey=28b36f68690ab6a4777abba9c2f11561

它是基于Lua 脚本语言来实现的。

触动精灵是一款模拟手机触摸、按键操作的软件,通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。

触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本;只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。

扩展资料:

1、软件介绍

触动精灵的脚本编写基于 Lua 脚本语言,支持其所有标准函数库。除了能够模拟点击、移动、单击 Home 键之外,触动精灵还提供一系列取色、找色、截图、找图等函数,更有丰富的网络插件、文件操作插件可供选择,脚本作者可以选择不公开源代码发布自己的脚本。

2、软件功能

(1)网络游戏中可作自动化脚本实现自动打怪,自动补血,自动说话等;

(2)办公族可用它自动处理表格、文档,自动收发邮件等;

(3)循环播放、定时运行能够按计划执行重复甚至繁杂的工作。

3、软件特点

(1)安装、操作简单;

(2)支持 Lua 基本函数库,提供模拟函数支持,第三方插件接口;

(3)集脚本试用、加密、编译与授权于一体的脚本分发系统。

参考资料来源:百度百科-触动精灵



基于Lua 脚本语言。

触动精灵的脚本编写基于Lua 脚本语言,支持其所有标准函数库。除了能够模拟点击、移动、单击 Home键之外,触动精灵还提供一系列取色、找色、截图、找图等函数,更有丰富的网络插件、文件操作插件可供选择,脚本作者可以选择不公开源代码发布自己的脚本。

通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本。

扩展资料:

触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本  。

还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本。

只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。

Lua 脚本语言的其他应用:

1、很多应用程序、游戏使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括魔兽世界、博德之门、愤怒的小鸟、QQ三国、VOCALOID3、Garry's Mod、太阳神三国杀、游戏王ygocore和饥荒等。

2、同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象。

3、使用Lua语言编写的第三方插件可以通过第三方脚本加载器插件FlyWithLua加载,让插件开发者可以轻松地编写功能强大的插件用以增强X-Plane的模拟效果。

参考资料:百度百科-触动精灵



基于Lua 脚本语言。

触动精灵的脚本编写基于Lua 脚本语言,支持其所有标准函数库。除了能够模拟点击、移动、单击 Home键之外,触动精灵还提供一系列取色、找色、截图、找图等函数,更有丰富的网络插件、文件操作插件可供选择,脚本作者可以选择不公开源代码发布自己的脚本。

通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本。

扩展资料:

Lua 脚本语言的其他应用:

1、很多应用程序、游戏使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括魔兽世界、博德之门、愤怒的小鸟、QQ三国、VOCALOID3、Garry's Mod、太阳神三国杀、游戏王ygocore和饥荒等。

2、同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象。

3、使用Lua语言编写的第三方插件可以通过第三方脚本加载器插件FlyWithLua加载,让插件开发者可以轻松地编写功能强大的插件用以增强X-Plane的模拟效果。

参考资料来源:百度百科-触动精灵



使用Instrumentation接口:对于非自行编译的安卓系统,无法获取系统签名,只能在前台模拟按键,不能后台模拟。

一种是使用Instrumentation接口,这个接口原本是用来对软件进行测试而留出来的。经过尝试,发现这个接口可以模拟按键,但是前提是在应用处于前台时。而应用处于前台时,模拟按键基本上也没有太大的作用(模拟按键操作应用自身似乎没有很大意义)。

当应用处于后台
时,这个Instrumentation接口就失效了。网上找到的解释是,在后台使用这个接口,需要有系统权限,也就是在Manifest中添加
android:sharedUserId="android.uid.system"。而这会导致什么问题呢?声明了系统权限的APK,只有具有系统签
名的情况下,才能被安装到安卓设备上,比如系统自带的电话、短信,本质上也就是APK程序,但是这些应用具有系统权限。

安卓系统有一套
签名机制,APK只有有了数字签名,才能被安装。通常调试时默认Eclipse自动对其进行签名,使用的是Debug签名。当发布应用时,开发者则使用自
己独有的数字签名文件对APK进行签名(这个文件可以用Eclipse生成,签名也可以让Eclipse完成)。APK有新版本的安装时,如果检测到签名
不一致,系统会提示签名不一致,只有卸载旧版本才能安装。这一机制从一定程度上避免了第三方对官方发布的APK进行修改甚至非法植入病毒等行为(当然如果
用户主动卸载旧版本的官方应用、安装新版本的非官方APK也是可以的)。而具有同一签名的不同App,它们之间可以共享一些数据。

而系统签名怎么
获取呢?在编译安卓系统的时候,会将一个系统签名的数字签名文件放到一起编译。对于一个已经编译完成的系统,或者为了适配不同系统,必然无法获取到这个数
字签名文件,于是也无法对APK进行系统签名。最后就导致具有uid.system属性的APK无法被安装,于是Instrumentation接口后台
模拟按键的方法,只能在自行编译系统的情况下才可以使用。

使用反射方法调用系统IWindowManager隐藏API:兼容性较差,稳定性不好,容易出错。另外实际编译时发生错误,原因暂时不明。

网上还有一种方
法。安卓系统中有一些隐藏API,通常是利用Java的权限限制,使得这些API无法被调用。但通过反射的方式,可以突破Java的权限限制。在
IWindowManager中就隐藏了可以模拟按键和触屏事件的API。尝试网上的方法,下载到一个由安卓源码编译好的jar文件,添加到工程中,然后
使用发射编写了一些代码,尝试调用隐藏API。结果编译的时候Eclipse直接不响应了,可能是因为电脑配置不够,jar文件太大。尝试了几次没有成
功,又考虑到这种方法有很多弊端,并且很可能最后还是需要系统权限(网上不少文章说得不是很清楚),于是就放弃了这个方法。

android模拟按键问题总结[使用IWindowManager.injectKeyEvent方法]

http://blog.csdn.net/xudongdong99/article/details/8857173

Android中使用隐藏API(大量图解)

http://163liufuliang.blog.163.com/blog/static/331651862013119114431760/

JNI调用C程序模拟按键:仍然是权限问题。

参考了网上一些
资料所提出的可能的思路,发现剩下能想到的方法就是用JNI实现,通过调用C/C++程序来模拟按键。对Linux底层编程不熟悉,网上参考了一些代码,
在Ubuntu下编写了一个按键模拟程序,很顺利的编译运行通过。然后又开始学习JNI的编译方法,先在C程序层写了个简单的加法运算,编译运行测试通
过,然后就把模拟按键的代码贴了进去。满怀期待的写好安卓Java层代码,编译、下载、执行程序,却发现完全没有效果。

想看一下到底是哪一步出错了,就在C程序里面改了改,用LogCat打印出C程序的返回值,发现在打开按键设备的时候出错,看来肯定又是权限的问题了。

尽管系统已经
Root,APK也允许使用Root权限,但是Root权限没法传递给C程序,权限不够,程序无法执行。在网上找了一通有关Linux、安卓权限的资料,
也没找出来什么思路。其实当时很疑惑,在Linux系统中,Root权限是最高的权限,安卓也不例外,有文章指出,Root权限>系统权限>
用户权限。尽管能获取到Root权限,却不能完成系统权限所能完成的任务,总感觉不应该。

安卓按键精灵:使用Root权限而不需系统签名,实现后台模拟按键和触屏等事件是可行的。

当时很绝望,感
觉估计只有自行编译系统才能解决问题了。就在那时候,突然想起了按键精灵软件。以前用过电脑版,在安卓市场一找,果然也有安卓版。下载使用发现,按键精灵
就可以实现在后台模拟按键操作,需要Root权限,但是是什么原理却不得而知。本想尝试反编译源码查看,但是当时出了一些问题,反编译没有成功。在网上搜
索安卓按键精灵的原理,除了之前的那两种依赖源码环境才能使用的API,也没有找到结果。不过至少说明了,使用Root权限而不需要系统签名,实现模拟按
键、并且兼容大量安卓设备是可行的。

最终解决问题:使用Shell调用ADB指令实现。

继续在网上搜索
安卓按键模拟(其实那时都不知道用什么关键字好了,能想到的关键字都用遍了,但是搜索出来的结果,都是之前提到的那几个依赖源码环境和系统权限的方案)。
发现有很多介绍ADB调试,向手机发送按键事件的文章。刚好之前做过在Root权限下,用Java调用安卓底层的Linux
Shell,然后执行pm指令进行APK的安装卸载。这时我突发奇想,能否用Shell调用ADB指令呢?

于是就进行了尝
试,使用Java执行Runtime.getRuntime().exec("su").getOutputStream(),获取了一个具有Root权
限的Process的输出流对象,向其中写入字符串即可以Root权限被Shell执行,ADB模拟按键的指令为 "input keyevent
keyCode",keyCode为按键的键值,例如KeyEvent.KEYCODE_VOLUME_UP表示音量加。

编译完程序安装执行,终于实现了预期的效果,当时非常高兴。至于触屏或鼠标事件,只要调用相应的ADB指令即可。但是有一点问题,就是反应速度非常慢,尤其是连续模拟多个按键的时候,甚至会死机。而按键精灵运行的就相当流畅,我又开始好奇按键精灵是怎么实现的。

后来终于还是找
到了原因,模拟按键时,不应每次都调用Runtime.getRuntime().exec("su"),因为每次调用这个代码的时候,都会获取
Runtime实例,并且执行"su"请求Root权限,反应就会很慢(我的理解是相当于每次都新开一个命令行窗口);而应该只是在一开始执行一次,并获
取一个OutputStream实例,后来每次执行一条Shell指令,只需向其中写入相应字符串,这样就快了很多。

下面贴出可用的代码。要求设备已经Root,不需要其他任何特殊权限或签名。由于用的是ADB指令,兼容性也不会有太大问题。首次运行程序时(其实也就是执行Runtime.exec("su")的时候),会请求Root权限。

/**
* 用root权限执行Linux下的Shell指令
*
* @author jzj
* @since 2014-09-09
*/
public class RootShellCmd {

private OutputStream os;

/**
* 执行shell指令
*
* @param cmd
* 指令
*/
public final void exec(String cmd) {
try {
if (os == null) {
os = Runtime.getRuntime().exec("su").getOutputStream();
}
os.write(cmd.getBytes());
os.flush();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 后台模拟全局按键
*
* @param keyCode
* 键值
*/
public final void simulateKey(int keyCode) {
exec("input keyevent " + keyCode + "\n");
}
}

写这篇文章的主要目的,并不是要强调这件事的难度,也不只是为了提出问题的解决方案(那样就没必要写前面那么多过程了)。而是想把我解决问题的过程完整的写出来,对我而言算是一个记录,对读者而言,没准能从中找到一些东西。


蜜蜂的知识
也就是说,国内现销售的蜂蜜有部分并不是真正的蜂蜜。在蜂王浆产量中,油菜花蜜为基础的要占到一半;由于蜂王浆是维持蜂王生存必须的食物,产量比较少,很多蜂农都不卖蜂王浆,纯的蜂王浆“劲道”非常大而且味道特别,难以下口,人的肠胃很难适应(会拉肚),极少直接食用;现在市面上的蜂王浆大多已经是混了多次蜂蜜的...

关于蜜蜂的资料
③单食性,即仅自某一种植物或近缘种上采食,如矢车菊花地蜂。蜜蜂各种类采访的花朵与口器的长短有密切关系:例如隧蜂科、地蜂科、分舌蜂科等口器较短的种类采访蔷薇科、十字花科、伞形科、毛茛科开放的花朵;而切叶蜂科、条蜂科和蜜蜂科的种类由于口器较长,则采访豆科、唇形科等具深花管的花朵。 生活方式分为3...

牡丹花怎么施肥
在种植牡丹前,基肥很重要,可以使用粪肥、饼肥、堆肥。花前肥一般在10月上旬施放。这个时间施的肥对牡丹本年的开花有大在原影响,有很多养花老手管这叫“促花肥”。肥料可以腐熟的饼肥或磷肥为主。花后肥一般在牡丹花开花的半个月后施放。这个时间施的肥可以促使开花的数量增加。尤其对第二年开花有...

白头发吃什么能变黑 食疗
1.黑芝麻 中医认为黑芝麻具有补肝肾、润五脏、益气力、长肌肉、填脑髓的作用,可用于治疗肝肾精血不足所致的眩晕、须发早白、脱发、腰膝酸软、四肢乏力、步履艰难、五脏虚损、皮燥发枯、肠燥便秘等病症,在乌发养颜方面的功效,更是有口皆碑。2.核桃仁 核桃仁“食之令肥健,润肌,黑须发,多食利小...

思茅区15790493307: 找一款可以在安卓手机上模拟按键(按键精灵之类)的软件 -
禽郑裕尔: 以前玩ppc的时候,也玩过“按键精灵”,但安卓做大后,几乎已经没有这样的程序出现了.按键精灵,先行设置键位,然后进入游戏,或是网页可以根据设定好了的动作,手机自己按键.可以玩游戏,可以抢红包. 但现在似乎没有了.

思茅区15790493307: 有没有类似于按键精灵的安卓软件 -
禽郑裕尔: 按键精灵本就有安卓版的,还有触动精灵.

思茅区15790493307: 安卓按键精灵,我要一个能在屏幕下方,聊天兰上方的连续点击脚本.跪求大神. -
禽郑裕尔: 全屏模式 按键精灵有个叫抓抓的工具抓图之后再抓抓中确定坐标(X,Y)然后 标记 star 鼠标移动到(X,Y) 延时(300) 鼠标左键单击() 跳转到标记 star 搞定!

思茅区15790493307: 最好的PC端Android模拟器是哪个软件 -
禽郑裕尔: 一提起安卓模拟器(PC安卓模拟器中文版),大家首推的肯定是大名鼎鼎的bluestacks安卓模拟器.这款模拟器是用户使用最多的,除了它比较稳定外,功能性强也是一大优点,今天在这里还要给大家推荐几款比较有名气的安卓模拟...

思茅区15790493307: "按键精灵(安卓版)"怎么把写好的脚本打包成小精灵 -
禽郑裕尔: 按键精灵我不会用,但是可以用输入法喊,输入法切换成智能ABC,在它那个图标那里用鼠标右键,选择自定义新词,在第一个里面输入你想说的话,再设置热键,...

思茅区15790493307: 有没有一款手机是安卓系统,但它不是触屏的,而是用按键的 还不是全键盘的那种 -
禽郑裕尔: 其实安卓的就在于触摸安逸 有键盘也是触摸屏加全键盘或者是全键盘 你这要求的 还不如买诺基亚塞班的 不过我还真给你找到了 不过没有直板的 夏普(SHARP)SH7218U 3G手机(黑色)WCDMA/GSM 非定制机 1428(翻盖加标准键盘) 夏普(SHARP)SH7228U 3G手机(粉色)WCDMA/GSM 非定制机1459 (翻盖 触控 加标准键盘) 酷派(Coolpad)N950 3G手机(典雅黑)CDMA2000/GSM 双模双待单通 电信定制(翻盖 触控 加标准键盘)1088 你说的这要求以前诺基亚的 N79啊 N系列的好多啊 不过是塞班 且停产 现在触摸屏是趋势 键盘的很少啊 唉

思茅区15790493307: 想找一款是安卓系统的键盘机,触碰的就要推荐了
禽郑裕尔: android手机类别很多,从厂商来看有htc,moto,samsung,lg等等很多,但android的的系统的手机都是触摸屏,但是有部分带实体全键盘,在下比较推荐的是moto的milestone2和htc desire z,具体参数可以看网上

思茅区15790493307: 按键精灵安卓版UI界面用? 比如我脚本有十段代码,分别是0到9,我想在UI界面设置一个下拉框,下拉 -
禽郑裕尔: Select Case Form1.ComboBox1.ListIndex Case 0 //代码一 Case 1 //代码二 Case 2 //代码三 Case 3 //代码四 Case 4 //代码五 End Select 根据下拉框的初始选项进行情况选择.

思茅区15790493307: 手机读书软件都有哪些,哪个最好用呢? -
禽郑裕尔: 第一.anyview Anyview是手机上的电子阅读器.虽然市面上已有 Anyview阅读器现成的、比较成熟的电子书软件,然而由于其需要对每一本书本进行制作,因此就产生了Anyview. Anyview希望成为最好的手机阅读器,并且希望向使用该软件的用...

思茅区15790493307: 目前市面上最好的安卓智能国产手机是哪一部? -
禽郑裕尔: 小米MIX,6G RAM+256GROM,高通骁龙821CPU,目前顶级配置,价格低,性能强悍,系统优化非常好,最好用的系统,

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网