aosp14安卓14无法事件注入报错was not directed at a window owned by uid

Android Input事件注入 1. Android可以通过adb shell input xxx命令注入输入事件,调用IMS.injectInputEvent,最终走到通过JNI调用InputDispatcher注入事件,没有经过InputReader。2. 通过InputManager提供的接口注入。 阅读详情
AI摘要

本文针对Android 14中触摸事件注入失败的问题,通过对比scrcpy实现和源码分析,找到了问题所在并提供了解决方案。

背景:

在android 10版本时候,讲解了一个触摸事件的注入项目,但是在android 14的版本上体验了一下会包如下错误:
Process: com.example.injectmotion, PID: 14429
java.lang.IllegalArgumentException: Targeted input event injection from pid 14429 was not directed at a window owned by uid 10185.

在这里插入图片描述
明显看到这里居然报错了,,,明明android 10版本是好的,那这个是为啥??
难道是没有权限,注入权限有提升?
通过dumpsys package查看下权限情况:
在这里插入图片描述明显可以看到
android.permission.INJECT_EVENTS: granted=true
是被授权的,如果是没有权限理论上也不是报这个错误,应该是报如下错误:
Injecting input events requires the caller (or the source of the instrumentation, if any) to have the INJECT_EVENTS permission.
所以可以排除掉没有权限的问题,那么为啥还会报错呢?

问题分析和解决方法:

发现上面报错了,可以有以下两个思路:
1、类比法,难道android 14都是不可以进行触摸事件注入了么?但是明显scrcpy是可以进行模拟触摸注入的,所以可以参考scrcpy如何实现
2、也可以直接进行源码分析,通过源码分析来找出问题进行修改

先尝试第一种,看看scrcpy是哪个模拟触摸注入的方法:
在这里插入图片描述这里实际上是反射调用了inputmanager相关方法
在这里插入图片描述
最后到了这里:
在这里插入图片描述
再继续往下看调用,注意这里又调用方法,但是多了一个参数就是targetUid,而且这里给的是一个固定的Process.INVALID_UID
在这里插入图片描述
然后才会调用到服务端IMS中,注意也是是个
在这里插入图片描述
那么看看课程的
frameworks/base/core/java/android/app/Instrumentation.java
里面的方法是怎么调用有啥不同么 ?
可以看如下截图,这里传递的targetUid明显传递是自己进程的Uid在这里插入图片描述注意这里最后也调用IMS的远端方法,和scrcpy调用方法没有什么差别
在这里插入图片描述

哈哈,其实上面分析过程就已经找出了,为啥高版本课程的使用Instrumentation方法不行了,因为Instrumentation的方法调用InputManagerService接口时候对targetUid进行了指定,但是InputManager的方法并没有指定固定的targetUid而是用的Process.INVALID_UID。

验证猜想及修改

既然上面分析的Instrumentation已经不行了,也不太可能修改framework把Instrumentation代码修改或者扩展,这里就使用和scrcpy的方法一样,采用InputManager接口,但是接口又是hide的,可以和scrcpy一样采用反射方式,我这边给出一种新方法,不采用反射,用的是一个模拟假接口,类和接口和InputManager一模一样,但是空实现

在这里插入图片描述

可以看到在自己代码定义了这样一个InputManager类,报名等和系统的包名类名,方法名字一模一样,其实目的只是为了让系统编译通过而已。

最后调用采用如下调用方式:
InputManager.getInstance().injectInputEvent(clickDown,0);

正常签名运行,一切正常没有报错,模拟触摸搞定

更多framework实战干货,请关注下面“千里马学框架”

Andorid Input事件 注入方法及原理介绍 如果APP不是放在系统源码中编译,直接使用这个方法的话,肯定是编译不过的,这时候我们可以借助Instrumentation类来实现模拟一个输入事件,例如注入一个MotionEvent 的down事件。3,对于自己应用内的事件注入,是有权限的,但是如果想注入事件到其它的应用,是需要申请INJECT_EVENTS权限的,而这个权限是需要系统签名的应用才能申请。在Android系统中,除了真实的输入设备可以产生事件之外,我们也可以通过软件的方式,模拟一个输入事件,比如模拟一个点击事件,模拟一个按键事件等等。 阅读详情

相关推荐

requires INJECT_EVENTS permission

今天用一个洋气点的标题(不就是小学生也能看懂的英文吗),是因为 Android 自动化测试报了个错:Injecting to another application requires INJECT_EVENTS permission。为此我闹了点笑话 现在仍然是疫情期间,所以在家远程办公时收到同事发来的问题,于是在网上搜到一个答案 竟然是因为 USB 调试没打开呢?毕竟是在排查问题,只能先看看我...

不甘平庸的技术从业者 5398

Appium 操作Android真机报错Injecting to another application requires INJECT_EVENTS permission解决方案

开发配置:红米手机 Redmi4A, Android:6.0.1 Appium: 1.9 进入开发者选项,打开USB调试(安全设置)

supramolecular的博客 2407

PINN——加入物理约束的神经网络

【摘要】 基于物理信息的神经网络(Physics-informed Neural Network, 简称PINN),是一类用于解决有监督学习任务的神经网络,它不仅能够像传统神经网络一样学习到训练数据样本的分布规律,而且能够学习到数学方程描述的物理定律。与纯数据驱动的神经网络学习相比,PINN在训练过程中施加了物理信息约束,因而能用更少的数据样本学习到更具泛化能力的模型。本文主要解析这种神经网络以...

qq_39444290的博客 4585

小米手机adb调试报错Exception occurred while executing ‘keyevent‘:

解决方案:权限不足导致。设置里搜索‘开发者选项’,开启‘USB调试’、‘USB调试(安全设置)’,关闭‘启用系统优化’。设置-我的设备-全部参数与信息-连点八次OS版本。

xiangjiu99的博客 1343

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 480

abaqus 6.13安装(ubuntu 16.04LTS)

1。从iso将文件拷贝出来 2。chmod 777 -R ./* 给文件权限 3。sudo /home/xx/A/setup 4。安装licenseserver 5。拷贝lic,log文件 6。打开license sudo ./lmgrd -c path 7. 27011@xx or 27011@localhost ...

a1099313374的博客 1951

SecurityException: Injecting input events requires the caller to have the INJECT_EVENTS permission

第一,在开发者选项中,打开【USB 调试(安全设置)】。打开有一定风险,系统会确认多遍。第二,是USB连接上后,一定要选择文件传输,否则还是有错误。以上方法,在 红米 K60 + 澎湃 1.0 上亲测有效。

小小木屋 1441

手把手教你用DaVinci Configurator配置AUTOSAR SWC接口(含RTE避坑指南)

本文提供了一份基于DaVinci Configurator工具的AUTOSAR软件组件(SWC)接口配置实战指南。文章详细拆解了SR(发送者-接收者)和CS(客户端-服务器)接口的配置流程,并重点分享了运行时环境(RTE)生成阶段在多核部署、数据类型匹配等常见陷阱中的避坑方案与调试技巧,旨在帮助汽车电子工程师高效完成配置并规避错误。

uuu88的博客 552

小米手机adb命令报错

设置>>更多设置>>开发者选项>>开启USB调试及USB调试(安全设置),并在系统跟踪中关闭跟踪。打开开发者选项 ,小米手机是点进我的设备,进入全部参数然后连续点击系统版本号进入开发者模式。

Fyl0525的博客 3325

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1132

基于电子海图的水面无人艇全局路径规划

Research and Implementation of Global Path Planning for Unmanned Surface Vehicle Based on Electronic Chart (基于电子海图的水面无人艇全局路径规划)   该论文已经在ICMIR2017会议上发表,附上springer的文献地址 Research and Implementation of Gl...

weixin_30797199的博客 1591

OCP-1Z0-052-V8.02-105题

105. Which statements are true regarding the creation of an incident package file by using the EMWorkbench Support? (Choose all that apply.) A.You can add SQL test cases to the incident package. B.Y...

836811384 316

群晖Video Station海报墙插件更新了!手把手教你用c5h12o5插件搞定豆瓣/TMDB搜刮

本文详细介绍了如何使用c5h12o5插件为群晖Video Station配置高效的海报墙系统。该插件支持豆瓣、TMDB等多数据源并行搜刮,智能优先级设置和本地化优化,解决TMDB API失效问题,提升影视库管理体验。包含安装教程、配置策略和高级使用技巧,适合影视爱好者优化NAS媒体库。

weixin_29250403的博客 268

IMS:injectInputEvent注入Input事件

IMS:injectInputEvent注入Input事件 android11-release IMS:InputManagerService启动简要 IMS:InputReader线程获取输入事件 IMS:InputDispatcher线程分发事件 adb命令输入KEYCODE_VOLUME_UP adb shell input keyevent KEYCODE_VOLUME_UP frameworks\base\core\java\android\view\KeyEvent.java framewo

许浑的博客 4395

AI测试入门:基于 RAG 的 LLM 应用程序的测试方法「详细介绍」

一个典型的 RAG 架构包括一个检索器(对知识库进行矢量搜索检索上下文的组件)和一个生成器(从检索器中获取检索上下文以构建提示并生成自定义 LLM 响应作为最终输出的组件)。在大多数情况下, 知识库”由存储在向量数据库(如 ChromaDB)中的向量嵌入组成。

blues_C的博客 1872

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Input系统学习-----injectInputEvent注入事件调用流程

input命令可以用来注入事件,代码在frameworks/base/cmds/input/src/com/android/commands/input/Input.java 注入点击等触碰事件时,在Android 10版本后还可以通过-d来指定displayId,这个对多屏手机具有测试参考作用。 InputManager的injectInputEvent方法最终调用到InputDispatcher::injectInputEvent int32_t InputDispatcher::inject..

aaajj的专栏 3848

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Robotium 自动化测试报错:Injecting to another application requires INJECT_EVENT permission

今天再试昨晚调通的poc攻击程序时突然报错,调了好久程序都不见改变, 甚至怀疑我的程序只过美国时间吗,只有晚上才跑的出来??。。。当然是瞎想 baidu了一下,code/google中的robotium专版真是个好地方,昨晚解决了我jar包的错误,现在也找到了这个问题所在, 网址是http://code.google.com/p/robotium/issues/detail?id=1 里面

heymanxue的专栏 1170

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

javassist doc page2

CtClassprovides methods for introspection. The introspective ability of Javassist is compatible with that of the Java reflection API.CtClassprovidesgetName(),getSuperclass(),getMethods(), and s...

kongkong的专栏 676

【Appium踩坑】SecurityException:Injecting to another application requires INJECT_EVENTS permission

设备:vivo y66 + Android 6.0.1 工具: Appium desktop 1.15.1 解决 开发者选项中 - USB模拟点击权限 - 打开 详细报错信息 Encountered internal error running command: An unknown server-side error occurred while processing the command. Original error: java.lang.SecurityException: Injecting

青禾tester 2324

scrcpy 使用指南:高效的 Android 设备屏幕镜像与控制

scrcpy是一个开源应用程序,可以通过 USB 或TCP/IP连接的 Android 设备进行屏幕镜像(视频和音频),并允许使用计算机的键盘和鼠标控制设备。它不需要任何root权限,支持LinuxWindows和macOS系统。

qq_43472841的博客 3637

Andriod自动化测试click事件报错:Injecting to another application requires INJECT_EVENTS permission解决

这个报错是在学习自动化测试时,基于weditor工具时报错,不过也适用于appium报这样的错,不过我用appium时没有打开click也是可以用的,看个人情况吧, 报错截图: 我手机是vivio x9 版本是:7.16.2 解决方法: 打开手机的设置里边的开发者选项,将USB模拟点击打开,问题就解决了...

博客 7786

app联调出现java.lang.SecurityException问题的解决方法

最近在梳理以前做项目时记的笔记。当时开发的一个模块涉及到与搜索模块的联调,通过联调实现用搜索功能实现跳转自己开发的模块中的几个Activity,但在联调过程中,报出了:java.lang.SecurityException的问题。 根据出现的错误找到原因:通过在被调用的Activty中的Androidmanifest中添加 android:exported="true" 问题得以解决,先通过本文记录一下。 注:后续的安全性问题未考虑,关于这个问题后面还需要研究。 ...

ambitionLlll的博客 5020

robotium clickonscreen()出现INJECT_EVENT permission的临时解决方案

今天遇见一个很大的麻烦,我相信很多人都遇见过 我在用Robotium做一个点击测试的时候,使用clickOnScreen()这个方法时,出现了如下错误,导致测试工程中断,影响测试进度、 junit.framework.AssertionFailedError: Click at (0.0, 0.0) can not be completed! (java.lang.SecurityExcept

zuyuanzhang自学之路 3005

Injecting to another application requires INJECT_EVENTS permission

Injecting to another application requires INJECT_EVENTS permission

guanzuochen的博客 1万+
上一篇: aosp14的分屏接口ISplitScreen接口获取方式更新-学员疑问答疑
下一篇: wms中对屏幕进行修改wm size设置屏幕宽高原理剖析
千里马学框架
博客等级 码龄6年 1万+粉丝 651原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值