zoukankan      html  css  js  c++  java
  • 【转】Android-Input Getevent

    https://source.android.com/devices/input/getevent

    Getevent

    getevent 工具可在设备上运行,并可提供关于输入设备和内核输入事件的实时转储的信息。

    此工具非常实用,可确保设备驱动程序报告各个输入设备的一系列预期功能并生成输入事件的所需信息流。

    显示设备功能

    使用带有 adb 命令的 -p 选项来查看设备报告的所有键和轴。

    adb shell su -- getevent -p
     

    以下示例列出了特定键盘所支持的 Linux 键码和其他事件。

      name:     "Motorola Bluetooth Wireless Keyboard"
      events:
        KEY (0001): 0001  0002  0003  0004  0005  0006  0007  0008
                    0009  000a  000b  000c  000d  000e  000f  0010
                    0011  0012  0013  0014  0015  0016  0017  0018
                    0019  001a  001b  001c  001d  001e  001f  0020
                    0021  0022  0023  0024  0025  0026  0027  0028
                    0029  002a  002b  002c  002d  002e  002f  0030
                    0031  0032  0033  0034  0035  0036  0037  0038
                    0039  003a  003b  003c  003d  003e  003f  0040
                    0041  0042  0043  0044  0045  0046  0047  0048
                    0049  004a  004b  004c  004d  004e  004f  0050
                    0051  0052  0053  0055  0056  0057  0058  0059
                    005a  005b  005c  005d  005e  005f  0060  0061
                    0062  0063  0064  0066  0067  0068  0069  006a
                    006b  006c  006d  006e  006f  0071  0072  0073
                    0074  0075  0077  0079  007a  007b  007c  007d
                    007e  007f  0080  0081  0082  0083  0084  0085
                    0086  0087  0088  0089  008a  008c  008e  0090
                    0096  0098  009b  009c  009e  009f  00a1  00a3
                    00a4  00a5  00a6  00ab  00ac  00ad  00b0  00b1
                    00b2  00b3  00b4  00b7  00b8  00b9  00ba  00bb
                    00bc  00bd  00be  00bf  00c0  00c1  00c2  00d9
                    00f0  0110  0111  0112  01ba
        REL (0002): 0000  0001  0008
        ABS (0003): 0028  : value 223, min 0, max 255, fuzz 0, flat 0, resolution 0
                    0029  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                    002a  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                    002b  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
        MSC (0004): 0004
        LED (0011): 0000  0001  0002  0003  0004
      input props:
        <none>
    
     

    使用 -i 选项可获取更多信息,包括 HID 映射表和调试信息。

    使用 -l 选项可显示所有事件代码的文字标签。

    adb shell su -- getevent -lp /dev/input/event1
    
     

    示例:

      name:     "Melfas MMSxxx Touchscreen"
      events:
        ABS (0003): ABS_MT_SLOT           : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
                    ABS_MT_TOUCH_MAJOR    : value 0, min 0, max 30, fuzz 0, flat 0, resolution 0
                    ABS_MT_POSITION_X     : value 0, min 0, max 720, fuzz 0, flat 0, resolution 0
                    ABS_MT_POSITION_Y     : value 0, min 0, max 1280, fuzz 0, flat 0, resolution 0
                    ABS_MT_TRACKING_ID    : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
                    ABS_MT_PRESSURE       : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
      input props:
        INPUT_PROP_DIRECT
    
     

    显示实时事件

    以下示例显示了使用 Linux 多点触控输入协议“B”的触摸屏的双指多点触控手势。-l 选项可显示文字标签,而 -t 选项则可显示时间戳。

    adb shell su -- getevent -lt /dev/input/event1
    
     

    示例:

    [   78826.389007] EV_ABS       ABS_MT_TRACKING_ID   0000001f
    [   78826.389038] EV_ABS       ABS_MT_PRESSURE      000000ab
    [   78826.389038] EV_ABS       ABS_MT_POSITION_X    000000ab
    [   78826.389068] EV_ABS       ABS_MT_POSITION_Y    0000025b
    [   78826.389068] EV_ABS       ABS_MT_SLOT          00000001
    [   78826.389068] EV_ABS       ABS_MT_TRACKING_ID   00000020
    [   78826.389068] EV_ABS       ABS_MT_PRESSURE      000000b9
    [   78826.389099] EV_ABS       ABS_MT_POSITION_X    0000019e
    [   78826.389099] EV_ABS       ABS_MT_POSITION_Y    00000361
    [   78826.389099] EV_SYN       SYN_REPORT           00000000
    [   78826.468688] EV_ABS       ABS_MT_SLOT          00000000
    [   78826.468688] EV_ABS       ABS_MT_TRACKING_ID   ffffffff
    [   78826.468719] EV_ABS       ABS_MT_SLOT          00000001
    [   78826.468719] EV_ABS       ABS_MT_TRACKING_ID   ffffffff
    [   78826.468719] EV_SYN       SYN_REPORT           00000000
    
     

    注意getevent 时间戳采用 CLOCK_MONOTONIC 时基,并使用 $SECONDS.$MICROSECONDS 格式。有关详情,请参阅 getevent.c。

     

     

     

    验证按键映射工具

    Android 框架有一个名为 validatekeymaps 的小工具,用于验证输入设备配置文件、按键布局文件、按键字符映射文件和虚拟按键定义文件的语法。

    编译

    要编译 validatekeymaps,请设置开发环境,下载 Android 源代码树,对其进行编译,然后运行以下命令:

    mmm frameworks/base/tools/validatekeymaps
    
     

    该命令应该会将一个名为 validatekeymaps 的主机工具编译到 out/host/<os>/bin 目录中。

    使用

    如果您通过运行 envsetup.sh 设置了开发环境,那么 validatekeymaps 工具应当已经位于您的路径中。您可以通过运行 validatekeymaps 进行验证。

    validatekeymaps
    
     

    您应该会看到以下输出内容:

    Keymap Validation Tool
    
    Usage:
     validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...]
       Validates the specified key layouts, key character maps,
       input device configurations, or virtual key definitions.
    
     

    然后,您只需运行 validatekeymaps,并为其提供一个或多个要进行验证的文件的路径。

    validatekeymaps frameworks/base/data/keyboards/Generic.kl
    
     

    示例:

    Validating file 'frameworks/base/data/keyboards/Generic.kl'...
    No errors.
    
    Success.
    
     

    如果出现错误…

    validatekeymaps Bad.kl
    
     

    示例:

    Validating file 'Bad.kl'...
    E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'.
    Error -22 parsing key layout file.
    
    Failed!
    
     

    自动化

    最好先对所有配置文件运行 validatekeymaps,然后再将这些文件安装到设备中。

    通过使用脚本或 makefile,该过程可以作为编译系统的一部分轻松地自动执行。

    以下示例 Makefile 基于 frameworks/base/data/keyboards/Android.mk 的内容。

    # This makefile performs build time validation of framework keymap files.
    
    LOCAL_PATH := $(call my-dir)
    
    # Validate all key maps.
    include $(CLEAR_VARS)
    
    validatekeymaps := $(HOST_OUT_EXECUTABLES)/validatekeymaps$(HOST_EXECUTABLE_SUFFIX)
    files := MyKeyboard.kl MyKeyboard.kcm MyTouchScreen.idc
    
    LOCAL_MODULE := validate_framework_keymaps
    LOCAL_MODULE_TAGS := optional
    LOCAL_REQUIRED_MODULES := validatekeymaps
    
    validate_framework_keymaps: $(files)
        $(hide) $(validatekeymaps) $(files)
    
    include $(BUILD_PHONY_PACKAGE)


  • 相关阅读:
    安卓清理缓存怎么做(未完)
    【转】来讨论下 Android 面试该问什么?
    解决app安装成功后,直接点击“打开”再按home返回,再次打开app会重新启动的问题
    Android切换横竖屏不销毁前台Activity,也不影响后台Activity
    Android布局:宽度适应的横向跟随,防止挤掉重要视图
    Android上的Badge,快速实现给应用添加角标
    博客上传图片存储解决
    ViewComponent组件在框架中使用
    Git日常使用命令
    js中的preventDefault与stopPropagation详解
  • 原文地址:https://www.cnblogs.com/nightnine/p/10590080.html
Copyright © 2011-2022 走看看