vysor 如何在非 root 设备上创建触摸事件?

How does vysor create touch events on a non rooted device?

这是 Koushik Dutta 的 Vysor link - https://chrome.google.com/webstore/detail/vysor-beta/gidgenkbbabolejbgbpnhbimgjbffefm

它可以让您从 PC 控制您的 Android 设备。 然而,长期以来一直困扰我的一件事是它能够在 phone 上创建触摸事件,即使它没有根目录。

在对应用程序和 chrome 扩展进行了一些修改之后,我意识到他使用以下方式创建了一个单独的进程 -

sh -c "CLASSPATH=/data/app/com.koushikdutta.vysor-1/base.apk /system/bin/app_process32 /system/bin com.koushikdutta.vysor.Main"

Main class 包含通过反射将触摸事件传递给框架的代码。

以上代码将 Main class 作为一个单独的进程执行,其中 shell 作为用户执行该进程。

不过,据我所知,在您自己的应用程序之外创建触摸事件的唯一方法是您是 root。

有人对此有任何想法吗?

我想通了。

问题是 shell 用户也可以在整个屏幕上创建触摸事件。当您从 PC 执行 adb shell 时,通过 USB 数据线将您的 phone 连接到它,系统会自动为您分配用户 shell.

他所做的是,然后他使用这个 shell 用户将他的 Main class 作为一个单独的进程启动。现在,Main class 中的 Java 代码与 shell 用户具有相同的权限(因为呃,它是 linux)。

并且,在 class 中,他使用反射将触摸事件传递给 Android 框架。然后,框架会自动将触摸事件传播到 windows.

看看我在我自己的一个应用程序中实现的这两个 classes - Main.java and EventInput.java.

但请记住,由于此 Main class 必须 运行 在单独的进程中,因此它无法访问捆绑它的应用程序的内存。为此,我必须使用套接字机制来传输数据。甚至 aidl 也可以用于此。