重学input知识之探索uinput相关内容--学员作业

背景:

近来有学员朋友问到了模拟事件输入相关内容,一般这块知识大部分学员朋友第一时间想到肯定是使用input相关的命令进行输入不就可以了。
例如如下:

adb shell input tap 100 1800

但是也有学员朋友提出,这种只能注入事件,一般都是基于现有的一些event进行注入

add device 1: /dev/input/event6
  name:     "uinput-fpc"
add device 2: /dev/input/event5
  name:     "msm8996-tasha-mtp-snd-card Button Jack"
add device 3: /dev/input/event4
  name:     "msm8996-tasha-mtp-snd-card Headset Jack"
add device 4: /dev/input/event3
  name:     "pwm-ir"
add device 5: /dev/input/event1
  name:     "gpio-keys"
add device 6: /dev/input/event0
  name:     "qpnp_pon"
add device 7: /dev/input/event2
  name:     "atmel-maxtouch"

但是如果需要新建立一个device,然后进行事件模拟注入呢?这种情况应该使用uinput相关的进行操作。
这个uinput相关内容确实属于一个比较陌生的知识领域,所以马哥接下来将带领大家一起来探索挖掘出相关的uinput的内容,及使用uinput来实现模拟事件的注入等。

uinput相关介绍

uinput通过创建一个虚拟的输入设备接口,允许用户在没有物理输入设备的情况下模拟输入操作。它允许开发者在软件层面模拟硬件设备的行为,这对于开发和测试涉及输入设备的软件非常有用。uinput支持多种输入事件,包括键盘按键、鼠标移动和点击等,使得开发者可以方便地测试和调试相关的应用程序。

android上uinput相关内容:

android本身是自带了相关的uinput节点:

emu64x:/ # ls -l /dev/uinput
crw-rw---- 1 uhid uhid 10, 223 2025-05-06 12:16 /dev/uinput

系统其实也有相关的uinput的命令源码:
uinput命令源码路径
frameworks/base/cmds/uinput

frameworks/base/cmds/uinput$ tree
.
├── Android.bp
├── examples
│   └── test-touchpad.evemu
├── jni
│   ├── Android.bp
│   ├── com_android_commands_uinput_Device.cpp
│   └── com_android_commands_uinput_Device.h
├── MODULE_LICENSE_APACHE2
├── NOTICE
├── OWNERS
├── README.md
├── src
│   └── com
│       └── android
│           └── commands
│               └── uinput
│                   ├── Device.java
│                   ├── EvemuParser.java
│                   ├── Event.java
│                   ├── EventParser.java
│                   ├── InputAbsInfo.aidl
│                   ├── JsonStyleParser.java
│                   └── Uinput.java
├── TEST_MAPPING
├── tests
│   ├── Android.bp
│   ├── AndroidManifest.xml
│   └── src
│       └── com
│           └── android
│               └── commands
│                   └── uinput
│                       └── tests
│                           └── EvemuParserTest.java
└── uinput.sh

14 directories, 21 files

但是具体这个uinput命令如何使用呢?其实系统中并没有看到有详细的使用方式,所以这个uinput的使用门槛其实比较高

作业布置:

uinput其实本质是linux上就自带的,并不是android特有的,主要完全也可以基于标准的linux相关接口就可以对/dev/uinput进行相关的操作和使用,所以一共给大家布置两个题目
题目1:
编写一个native可执行程序,基于标准的/dev/uinput节点,实现一个模拟鼠标,可以实现对鼠标位置的控制

题目2
请针对android上源码

frameworks/base/cmds/uinput

编译成的uinput命令进行相关的使用,要写出详细可以用的实战使用uinput命令的方式,解决目前aosp上uinput命令不知道怎么使用的痛点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千里马学框架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值