安卓重写sendevent。c从c到Java
在安卓中,我使用sendevent模拟点击和拖动事件。代码是:
String[] events = new String[7];
events[0] = "sendevent /dev/input/event1 3 57 0";
events[1] = "sendevent /dev/input/event1 3 53 " + x1;
events[2] = "sendevent /dev/input/event1 3 54 " + y1;
events[3] = "sendevent /dev/input/event1 3 58 31";
events[4] = "sendevent /dev/input/event1 3 50 2";
events[5] = "sendevent /dev/input/event1 0 2 0";
events[6] = "sendevent /dev/input/event1 0 0 0";
Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
for (String event : events) {
os.writeBytes(event + "\n");
os.flush();
}
是的,它可以实现结果,但它非常缓慢和不稳定,每个sendevent都会有一个新的过程来实现
然后我在https://www.assembla.com/code/安卓-gb-for-sharp-is01/git/nodes/debug/system/core/toolbox/sendevent.c中找到sendevent源代码,它是用c编写的,每次它打开一个文件并编写参数,每次都会创建一个新的进程,所以我有一个想法,将sendevent重写为Java并直接在安卓代码中使用,它只需要打开一次文件并编写所有参数
可行吗?它能加速我的代码吗
# 1 楼答案
是的,这是可行的,您需要模拟表示输入事件结构的字节序列,并将其写入名为
/dev/input/event1
的文件。它应该会大大加快你的代码速度,因为脱壳是一个相当昂贵的操作这个问题(Using C struct in Java)有很多关于C结构和Java之间合作的有用信息
顺便说一句,同时我看了一下Preon(我不知道那个图书馆),它看起来真的很棒。下次我要处理低级电报的时候,我一定要试一试