Android跨进程事件注入 Injecting to another application requires INJECT_EVENTS permission

本文介绍了一种在Android系统中实现跨进程事件注入的方法,通过修改文件权限并使用sendevent命令来模拟屏幕点击,以此绕过INJECT_EVENTS权限限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android跨进程事件注入

Android跨进程事件注入时会出现如下错误

Injecting to another application requires INJECT_EVENTS permission

测试机 :root的XIMO MI 3, 系统4.4.4

解决方案,使用sendevent绕过权限检查机制

如果想知道原理可阅读参考文档

example ,跨进程模拟屏幕点击

  1. 将/dev/input/下的所有文件权限修改为666(每次重启后都要修改权限)

    chmod 666 event1

    也可以用re文件管理器修改文件权限

    这里写图片描述

  2. 进入cmd,输入

    adb shell getevent
  3. 在手机屏幕上点击,会得到一个完整的点击命令,如下所示

    这里写图片描述

  4. code

    private static Handler mFinalizeHandler;
    HandlerThread finalizeThread = new HandlerThread("MyFinalizeThread");
    finalizeThread.start();
    mFinalizeHandler = new Handler(finalizeThread.getLooper());
    
    private static void simuClick() {
        // TODO 不同的手机命令不同
       // 将上面的一次点击命令全部写到字符串数组s中, 注意将上述十六进制改为十进制
        String[] s = {"/dev/input/event1 3 57 815", "/dev/input/event1 3 53 517",剩余的点击命令.... };
        for (String cmd : s) {
        cmd = "sendevent " + cmd;
        try {
            final Process p = Runtime.getRuntime().exec(cmd);
            mFinalizeHandler.post(new Runnable() {
            @Override
            public void run() {
                try {
                p.waitFor();
                } catch (InterruptedException e) {
                } finally {
                p.destroy();
                }
            }
            });
        } catch (Throwable t) {
                t.printStackTrace();
       }
    }

参考网址

http://blog.youkuaiyun.com/u010164190/article/details/50550805

http://blog.youkuaiyun.com/zhubaitian/article/details/40430053

http://blog.youkuaiyun.com/hellowxwworld/article/details/10732863/

http://blog.youkuaiyun.com/mad1989/article/details/38109689/

http://blog.youkuaiyun.com/u010164190/article/details/50550805

http://blog.bihe0832.com/adb-shell-input.html

[19:49:14][ERROR]<airtest.core.api> Traceback (most recent call last): File "airtest\core\android\adb.py", line 374, in shell File "airtest\core\android\adb.py", line 332, in raw_shell File "airtest\core\android\adb.py", line 197, in cmd airtest.core.error.AdbError: stdout[b''] stderr[b'java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission\r\n\tat android.os.Parcel.createException(Parcel.java:2074)\r\n\tat android.os.Parcel.readException(Parcel.java:2042)\r\n\tat android.os.Parcel.readException(Parcel.java:1990)\r\n\tat android.hardware.input.IInputManager$Stub$Proxy.injectInputEvent(IInputManager.java:991)\r\n\tat android.hardware.input.InputManager.injectInputEvent(InputManager.java:886)\r\n\tat com.android.commands.input.Input.injectMotionEvent(Input.java:428)\r\n\tat com.android.commands.input.Input.access$200(Input.java:41)\r\n\tat com.android.commands.input.Input$InputTap.sendTap(Input.java:224)\r\n\tat com.android.commands.input.Input$InputTap.run(Input.java:218)\r\n\tat com.android.commands.input.Input.onRun(Input.java:108)\r\n\tat com.android.internal.os.BaseCommand.run(BaseCommand.java:56)\r\n\tat com.android.commands.input.Input.main(Input.java:71)\r\n\tat com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)\r\n\tat com.android.internal.os.RuntimeInit.main(RuntimeInit.java:380)\r\nCaused by: android.os.RemoteException: Remote stack trace:\r\n\tat com.android.server.input.InputManagerService.injectInputEventInternal(InputManagerService.java:754)\r\n\tat com.android.server.input.InputManagerService.injectInputEvent(InputManagerService.java:728)\r\n\tat android.hardware.input.IInputManager$Stub.onTransact(IInputManager.java:451)\r\n\tat android.os.Binder.execTransactInternal(Binder.java:1021)\r\n\tat android.os.Binder.execTransact(Binder.java:994)\r\n\r\n'] During handling of the above exception, another exception occurred:
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值