有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓重写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) 个答案

  1. # 1 楼答案

    是的,这是可行的,您需要模拟表示输入事件结构的字节序列,并将其写入名为/dev/input/event1的文件。它应该会大大加快你的代码速度,因为脱壳是一个相当昂贵的操作

    这个问题(Using C struct in Java)有很多关于C结构和Java之间合作的有用信息

    顺便说一句,同时我看了一下Preon(我不知道那个图书馆),它看起来真的很棒。下次我要处理低级电报的时候,我一定要试一试