【发布时间】:2018-09-26 02:29:49
【问题描述】:
我的游戏没有内置控制器支持,但带有基于触摸的控件。我想使用游戏手柄并在 Android 中获得一些动手编程经验。
我想知道我是否可以让我的应用监听控制器事件,并将它们转发到我的游戏。
我学会了如何process controller events。然后我发现由于安全原因我无法转发它们——现在允许以编程方式发送触摸事件是有充分理由的。
根据this blog (its SSL cert expired),有三种方式注入触摸事件:
- 使用内部 API(容易更改,需要 root 才能发送到另一个应用程序)
- 使用公共 API、Instrumentation(需要 root 才能发送到另一个应用)
- 直接写入 /dev/input/eventX(需要 root 才能更改权限)
我发现的其他方法包括构建您自己的平台,因此您可以将您的应用程序设置为系统应用程序并使用平台证书对其进行签名,以提供所需的权限。
或者在您自己的应用程序中包装另一个应用程序,但使用 Instrumentation 发送触摸事件仍然需要 root。
我还阅读了有关 Accessibility API 的信息,但它似乎被认为是对 API 的滥用,并且将来可能是不可能的。
我宁愿不让我的设备 root,因为如果检测到 root,许多游戏都会出现问题。
我正要放弃,但后来我发现了这样的应用:
- Touch4Gamepad - 这个使用了称为 Arduino Board 的硬件。 Demo of Touch4Gamepad
- Octopus - 这似乎是我想尝试的方法,但它有相当两极分化的 cmets。它也不适用于 Google Play 服务。 Demo of Octopus
- DRO-CON - 这个似乎采用了完全不同的方法,通过连接的 PC 进行。
- TeamViewer - 似乎可以远程控制 Android,包括发送触摸事件。根据this thread,TeamViewer 与手机制造商达成协议以获得所需的权限。 Supported Manufacturers for Remote Control
尽管 Android 具有安全性,但选项 2 似乎无论如何都能做到。效果如何?
编辑:我下载了 Octopus 的 APK 并查看了里面。它包括一个名为 libinject.so... 的文件,这就是它发挥作用的地方。我现在有一个新的研究方向,但如果有人有与此相关的资源的链接,我将不胜感激。
【问题讨论】:
-
设法弄清楚这个?
-
@hepizoj:很遗憾,没有。八达通在 Google Play 上玩得不好,所以没用。 TeamViewer 通过与制造商达成交易来实现这一目标。我尝试在 Arduino Board 论坛上询问它,但没有人回答。不确定它是否会起作用,我还不想购买 Arduino 板。
-
是的,但是 libinject.so 呢?章鱼是怎么变魔术的? Octopus 不需要 root 访问权限、系统应用程序权限或 ROM 签名。怎么样?)
-
我没有下载 Octupus,但如果它使用 Accessibility 权限,那么它使用的 API 已经变得更加受限,并且一些使用该 API 的恶意应用正在从 Play 商店中删除。
-
虽然已经晚了,但你试过了吗? stackoverflow.com/a/51706446/16146250