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

3 阅读3分钟

背景:

近来有学员朋友问到了模拟事件输入相关内容,一般这块知识大部分学员朋友第一时间想到肯定是使用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实战干货,请关注下面“千里马学框架”

原文地址:blog.csdn.net/learnframew…