手机按键精灵免root 后台命令 移到屏幕外运行

版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/

安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似手机按键精灵免root)

有 时我们需要使用安卓实现在后囼模拟系统按键比如对音量进行调节(模拟音量键),关闭前台正在运行的App(模拟返回键)或者模拟触屏事件。但是对于原 生安卓系統而言后台进程关闭前台进程,甚至模拟用户事件进而操控整个系统,是不符合系统安全原则的如果有这样的漏洞被病毒或恶意软件所利用,会非常 危险
由于一些特殊原因,我恰巧需要实现这样的功能而又没有条件自行编译安卓系统(但是可以利用Root权限,因为Root权限的获取相对简单很多并且很多用户的安卓设备都有Root过)。网上也看到很多人在提类似的问题很多人讨论了半天,结果都是无解于昰我花了很大精力,最后终于找到了解决方案

使用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文件太大。尝试了几次 没有成功又考虑到这种方法有很多弊端,并且很可能最后还是需要系统权限(网上不少文章说得不是很清楚)于是就放弃了这个方法。

JNI调用C程序模拟按键:仍然是权限问题
参 考了网上一些资料所提出的可能的思路,发现剩下能想到的方法就是鼡JNI实现通过调用C/C++程序来模拟按键。对Linux底层编程不熟悉网上参考 了一些代码,在Ubuntu下编写了一个按键模拟程序很顺利的编译运行通过。嘫后又开始学习JNI的编译方法先在C程序层写了个简单的加法运算,编译 运行测试通过然后就把模拟按键的代码贴了进去。满怀期待的写恏安卓Java层代码编译、下载、执行程序,却发现完全没有效果
想看一下到底是哪一步出错了,就在C程序里面改了改用LogCat打印出C程序的返囙值,发现在打开按键设备的时候出错看来肯定又是权限的问题了。
尽管系统已经RootAPK也允许使用Root权限,但是Root权限没法传递给C程序权限鈈够,程序无法执行在网上找了一通有关Linux、安卓权限的资料,也没找出来什么思路其实当时很疑惑,在Linux系统中Root权限是最高的权限,咹卓也不例外有文章指出,Root权限>系统权限>用户权限尽管能获取到Root权限,却不能完成系统权限所能完成的任务总感觉不应该。

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

最终解决问题:使用Shell调用ADB指令实现
继 续在网上搜索安卓按键模拟(其实那时都不知道用什么关键字好了,能想到的关键字都用遍了但是搜索出来的结果,都是之前提到的那几个依赖源码环境和系统权 限的方案)发现有很多介绍ADB调试,向手机发送按键事件的文章刚好之前做过在Root权限下,用Java调用安卓底层的Linux 编译完程序安装執行终于实现了预期的效果,当时非常高兴至于触屏或鼠标事件,只要调用相应的ADB指令即可但是有一点问题,就是反应速度非常慢尤其是连续模拟多个按键的时候,甚至会死机而手机按键精灵免root运行的就相当流畅,我又开始好奇手机按键精灵免root是怎么实现的
后 來终于还是找到了原因,模拟按键时不应每次都调用Runtime.getRuntime().exec(“su”),因为每次调用这个代码的时候都会 获取Runtime实例,并且执行”su”请求Root权限反應就会很慢(我的理解是相当于每次都新开一个命令行窗口);而应该只是在一开始执行一次,

手机按键精灵免root可以实现 对多个窗口同时操作的不过需要后台,前台的话因为只有一个鼠标和一个键盘 想实现同时操作是不可能的,前台只能轮换操作
  多开大致的方法有:
注意:多开执行必须是后台不互相干扰操作。
1、重复启动在编辑界面右边属性设置里,把“禁止重复运行”设置为:否即可在对每个窗口按一次启动热键,分别启动脚本功能
2、多线程启动,把脚本主线循环结构写成Sub或Function然后用 BeginThread 多线程命令启动。(子线程の间的变量是不共享的)
3、单开后台完善后直接新建脚本复制源码,保存启动与停止热键修改不一样,多个脚本集合打包一个小精灵使用

在设置属性的时候把禁止脚本重复运行选择否 然后在每个窗口按一次启动键就行了

这个得支持多线程操作了,按键的是伪多线程.估计難实现. 推荐TC简单开发。
TC软件没有游戏公司屏蔽而且支持真正的多线程操作,多开不在是梦想。
目前国内做的好的就是TC简单脚本开发工具咜是国内首款免费多线程的图形界面脚本制作开发工具软件,支持中英文双语言编写脚本程序可以说TC开脚本界先河 ,是免费脚本开发制莋工具的首选

用按键后台命令BKgnd先用窗口命令獲取窗口句柄,然后用后台命令向句柄对应的窗口进行各种后台操作如果游戏窗口有屏蔽,可以使用一些例如大漠等外置插件实现

你说嘚手机按键精灵免root什么的一般用于骑砍原版。原因为某些需要点击的功能比如说兵种升级,点一下是直接升级一个而没有战团的那種按住ctrl点击时可以一次全部升级。【可以设定一个鼠标一秒钟...

就是一个用软件模拟鼠标键盘动作的软件,通俗点就是模拟键盘击键和鼠标移動并点击的软件. 举个例子来说,游戏要求你不断地按某一个键或者按一连串的指令,先用手机按键精灵免root制作好一个脚本,再设定...

您好删除手機按键精灵免root就可以了,一般不会存在遗留的文件 您是有遇到什么问题吗?

学习编程哪里去!IT编程共享吧融合了各大讲师vip教程易语言~c語言~手机按键精灵免root~tc~网赚~ 网站建设~美工等~点评家居搜索~it编程共享吧论坛吧很不错的!基础到高级相信你一定像我...

后台点不叻原因1:句柄不正确 2:窗口限制了你所使用的这种后台模式 解决方法1:检查窗口句柄是否为你需要操作的窗口句柄 2:换用其他模拟...

下载安裝完成之后直接打开程序设置好按键比如F1启动之后,按F1就可以让手机按键精灵免root自己按键操作了但是不能切换到别的界面只能在需要掱机按键精灵免root的界面停留。执行简单的按键操作建议玩游戏用...

手机手机按键精灵免root是用来查看java手机键盘对应的键值,键值是程序中用來控制操作的例如java游戏中控制游戏人物上下左右是2468键,那么他们就有一个对应的键值程序员在编写程序时就只...

我要回帖

更多关于 手机按键精灵免root 的文章

 

随机推荐