【问题标题】:INJECT_EVENTS permission on a rooted device根设备上的 INJECT_EVENTS 权限
【发布时间】:2012-04-01 01:01:04
【问题描述】:

我正在尝试在我的应用程序中实现一种 vnc(基于 oNaiPs 的 droid-vnc-server)。由于鼠标事件不适用于我的设备,我正在尝试以下操作:从本机 vnc 帧缓冲区服务器发送数据报,在Service 中捕获它们并使用InstrumentationsendPointerSync。这就是需要许可的地方。 我听说如果您使用 Root Exploter、chmod 和重置将 .apk 推送到/system/app,您可以获得所有需要的权限,但这在我的情况下不起作用,我仍然得到SecurityException。我也尝试过手动编辑/data/system/packages.xml 文件。

是否有任何其他方式获得许可(可能以某种方式降低它的安全级别?因为无论如何我只需要这个应用程序在我的设备上运行),或者可能是一种不同的方式来完成我试图完成的事情?

谢谢!

【问题讨论】:

    标签: android permissions instrumentation vnc


    【解决方案1】:

    那么你可能没有足够的搜索。是的,遗憾的是Android默认不提供,但这并不意味着它不可行。

    唯一的问题是你需要root。所以如果你有 root 权限,你可以将 /dev/input/eventX 文件的权限更改为可写。

    如果文件是可写的,您可以通过直接写入输入事件节点将自定义按键和触摸事件注入任何应用程序。

    我编写了一个小型库,可在此处作为开源:http://code.google.com/p/android-event-injector/

    它就是这样做的:自动 chmod 设置输入 devs 的权限,并使用 JNI 连接本机文件。然后它会公开一个简单的 Java 接口以在您的 Android 项目中使用。

    【讨论】:

      【解决方案2】:

      所以,经过几天的谷歌搜索和研究,我发现没有办法做到这一点(好吧,除了显然不可能的事情,比如创建我自己的 android 版本来获取系统签名),并设计了一种解决方法:vnc 服务器(取自droid-vnc-server v.0.72)打开一个套接字并将所有指针事件写入它(类型和坐标);然后有一个服务从这个套接字读取并通过多个sendevent 命令注入事件(我可能也可以从本机代码中做到这一点,但由于我对 c++ 很烂,我决定不打扰:))。

      这很好用(令人惊讶!),但我并不完全满意,因为在不同的设备上存在不同的常量(例如,事件类型、最小值和最大值等),我必须要么从getevent -p解析它们,或者指定一个配置文件。

      【讨论】:

        【解决方案3】:

        您是否在清单中添加了 INJECT_EVENTS 使用权限。

        【讨论】:

        • 当然。我检查了,在我推送到系统/应用程序并重置后,在启动时它仍然拒绝我的权限:` W/PackageManager(115):不授予权限 android.permission.INJECT_EVENTS 到包 com.vnc.test(protectionLevel=2 标志=0xbe47)`
        • 此权限不是常规类型,因此将其添加到清单中几乎没有效果。要使此权限生效,apk 必须使用系统证书进行签名。不适用于普通开发者,仅适用于平台制造商。
        猜你喜欢
        • 1970-01-01
        • 2011-07-19
        • 2014-02-27
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        • 2022-12-15
        相关资源
        最近更新 更多