我有一个没有内置控制器支持的游戏,只能通过触摸控制。我想使用游戏手柄,并在Android上获得一些实际的编程经验。
我想找出是否可以让我的应用程序监听控制器事件,并将它们转发到我的游戏中。
我学会了如何处理控制器事件。然后我发现由于安全原因,我不能将它们转发 - 在程序上发送触摸事件是不被允许的。
根据这篇博客(其SSL证书已过期),有三种注入触摸事件的方法:
- 使用内部API(易于更改,需要root权限才能发送到另一个应用程序)
- 使用公共API,Instrumentation(需要root权限才能发送到另一个应用程序)
- 直接写入/dev/input/eventX(需要root权限更改权限)
我找到的其他方法包括构建自己的平台,以便将应用程序设置为系统应用程序并使用平台证书签名,从而提供所需的权限。
或者在自己的应用程序中包装另一个应用程序,但是仍然需要使用Instrumentation将触摸事件发送到那里需要root权限。
我也读过关于辅助功能API的文章,但似乎这被认为是对API的误用,可能在未来是不可能的。
我宁愿不root我的设备,因为如果检测到root,许多游戏会有问题。
我差点放弃了,但后来我找到了这样的应用:
- Touch4Gamepad - 这个应用使用了叫做Arduino Board的硬件。 Touch4Gamepad的演示
- Octopus - 这个应用似乎是我想要尝试的方法,但是评论相当极端。 它也无法与Google Play服务一起使用。 Octopus的演示
- DRO-CON - 这个应用似乎采用了完全不同的方法,通过连接的PC来实现。
尽管Android有安全性,但选项2似乎仍然能够实现。它是如何做到的?
编辑:我下载了章鱼手柄的APK并查看了其中的内容。它包括一个名为libinject.so的文件...这就是它施展魔法的地方。我现在有了新的研究方向,但如果有人有相关资源链接,我会非常感激。