Explicação detalhada de comandos comuns para visualizar informações importantes no Android

Explicação detalhada de comandos comuns para visualizar informações importantes no Android

Se você precisar adaptar as chaves do sistema ou visualizar informações importantes, os comandos básicos das teclas e a visualização das informações nos comandos básicos são os principais fundamentos.

Neste artigo, vamos aprender sobre os comandos básicos das teclas e as principais informações contidas neles.

1. Comandos principais:

	getevent //查看所有键值事件的键值数值
	getevent -l //查看所有键值事件的键值字符串
	dumsys input //查看输入事件的相关信息,event对于的名称等信息
	cat /dev/input/eventX //只查看某个键值事件,Android9或者更新版本会乱码
    ls -l /system/usr/keylayout //查看系统有哪些kl文件

Exceto o comando "dumpsys input", que não requer permissões su/root, outros comandos requerem permissões para obter informações.

Exemplo simples:

C:\Users\As11040>adb shell
atom:/ $ getevent
could not open /dev/input/event2, Permission denied
could not open /dev/input/event0, Permission denied
add device 1: /dev/input/event3
  name:     "fts_ts"
could not open /dev/input/event1, Permission denied

Aqui você pode ver o aviso de que os dados do nó dev/input/eventX contidos não podem ser lidos e as permissões são proibidas.
Portanto, são necessárias permissões su ou permissões de root.
Mas também pode depender da plataforma.Algumas outras plataformas testadas antes podem "getevent", mas os nós em cat não.

2. Explicação detalhada dos comandos

Aqui usamos um telefone Xiaomi com root para explicar.

1、getevento

Pressione o botão de diminuir volume e, em seguida, pressione o botão de aumentar volume para imprimir:

C:\Users\As11040>adb shell
atom:/ $ su
atom:/ #
130|atom:/ # getevent
//(1)这里可以查看到按键的eventX节点,和节点在内核上的命名名称
add device 1: /dev/input/event2
  name:     "aw8624_haptic"
add device 2: /dev/input/event0
  name:     "ACCDET"
add device 3: /dev/input/event3
  name:     "fts_ts"
add device 4: /dev/input/event1
  name:     "mtk-kpd"

//(2)按下音量减按键,这里第二列的0001 对应的数据才是有用的数据,可以看到音量减键对应的按键键值是0x72
/dev/input/event1: 0001 0072 00000001 //(3)1是按下
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0072 00000000 //(4)0是抬起
/dev/input/event1: 0000 0000 00000000

//(5)按下音量加按键,可以看到音量加键对应的按键键值是0x73
/dev/input/event1: 0001 0073 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0073 00000000
/dev/input/event1: 0000 0000 00000000

Getevent é o comando mais comumente usado para visualizar valores-chave. Você pode visualizar os valores-chave das chaves no arquivo kl.
Informações úteis foram obtidas após getevent:

(1)系统触摸,按键,键盘等输入设备所有的数据节点eventX以及节点对应的名称命名name
这个节点的名称有些情况还是非常重要的,具体选择kl文件的时候可能会判断到是否存在对应的kl文件。
(2)按键键值对应的16进制数值
记住这里显示是16进制的键值,但是按键配置文件kl中,显示的是10进制的数值
比如音量减 0x72 对应10进制值是16*7+2=114,音量加 0X73-->115
(3)按键的节点数据在 "/dev/input/event1" 里面
(4)底层对该节点的命名名称是 "mtk-kpd"

Qual é a utilidade desse valor-chave?Na verdade, ele encontra o nome do evento correspondente ao arquivo kl e envia o evento para a camada inferior.

Haverá introduções relacionadas posteriormente.

2、getevent -l

//(1)这里可以查看到按键的eventX节点,和节点在内核上的命名名称
130|atom:/ # getevent -l
add device 1: /dev/input/event2
  name:     "aw8624_haptic"
add device 2: /dev/input/event0
  name:     "ACCDET"
add device 3: /dev/input/event3
  name:     "fts_ts"
add device 4: /dev/input/event1
  name:     "mtk-kpd"

//(2)按下音量减按键,这里第三列的DOWN/UP对应的数据才是有用的数据,可以看到音量减键对应的按键字符串是 KEY_VOLUMEDOWN
/dev/input/event1: EV_KEY       KEY_VOLUMEDOWN       DOWN // (3)kl文件中定义的是 VOLUMEDOWN 
/dev/input/event1: EV_SYN       SYN_REPORT           00000000
/dev/input/event1: EV_KEY       KEY_VOLUMEDOWN       UP
/dev/input/event1: EV_SYN       SYN_REPORT           00000000


/dev/input/event1: EV_KEY       KEY_VOLUMEUP         DOWN // (4)kl文件中定义的是 KEY_VOLUMEUP
/dev/input/event1: EV_SYN       SYN_REPORT           00000000
/dev/input/event1: EV_KEY       KEY_VOLUMEUP         UP
/dev/input/event1: EV_SYN       SYN_REPORT           00000000

"getevent -l" é um nome que a maioria das pessoas não usa com muita frequência, mas ainda é valioso para visualizar o significado dos principais eventos.
A string XXX de KEY_XXX é o comando enviado para a camada subjacente.
VOLUMEDOWN significa que o volume diminui e VOLUMEUP significa que o volume aumenta.

3. entrada dumsys

Este comando contém mais informações e é o mais específico, pertencente às informações de configuração padrão do sistema de entrada.

As principais informações relevantes são as seguintes:

atom:/ # dumpsys input
INPUT MANAGER (dumpsys input)

Input Manager State:
  Interactive: false
  System UI Visibility: 0x8008
  Pointer Speed: 0
  Pointer Gestures Enabled: true
  Show Touches: false
  Pointer Capture Enabled: false

Event Hub State: //(1)事件状态信息是主要关注的
  BuiltInKeyboardId: -2
  Devices: //(2)Devices里面的每个信息都是对应不同的节点信息
    -1: Virtual
      Classes: 0x40000023
      Path: <virtual> (3)关注Path字符串,就是节点的位置,这里是虚拟,不清楚具体意义
      Enabled: true
      Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd
      Location:
      ControllerNumber: 0
      UniqueId: <virtual>
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
    1: aw8624_haptic
      Classes: 0x00000200
      Path: /dev/input/event2
      Enabled: true
      Descriptor: 65195a4ab35c59e79bbba55177be90fc42ed3ae6
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile:
      KeyCharacterMapFile:
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
    2: ACCDET
      Classes: 0x00000081
      Path: /dev/input/event0
      Enabled: true
      Descriptor: 1c78f7e0d16d4dbc8d3ab93943523f379203f90b
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0019, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
    3: fts_ts
      Classes: 0x00000015
      Path: /dev/input/event3
      Enabled: true
      Descriptor: a1cc21cba608c55d28d6dd2b1939004df0e0c756
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0018, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
	  4: mtk-kpd //(4)按键事件的节点命名名称
      Classes: 0x00000001
      Path: /dev/input/event1 //(5)按键事件的节点位置,这个才是主要的,名称可以不可,但是节点必须找对
      Enabled: true
      Descriptor: f0d2e427e7a05eb6d316f5e14800c5ac7b6aee79
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0019, vendor=0x2454, product=0x6500, version=0x0010 //(6)各版本号,寻找kl使用到
      KeyLayoutFile: /system/usr/keylayout/mtk-kpd.kl //(7)实际起作用的kl文件
      KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
  Unattached video devices:
    <none>

Há muitas informações no comando "dumpsys input", apenas as principais são exibidas e analisadas aqui.
Visualize e analise ideias de log de "entrada dumpsys":

1、根据getevent 获取到事件的节点,比如这里按键节点是 event1
2、“dumpsys input”查看需要查找的节点的信息,比如这里的 event1 和 名称 mtk-kpd
3、查看里面的真正起作用的kl文件,比如这里是 /system/usr/keylayout/mtk-kpd.kl

Na verdade, as principais informações foram lidas aqui, mas como entendê-las e aplicá-las requer uma certa base.

Haverá exemplos de modificações individuais analisados ​​posteriormente.

4、gato XXX.kl

Depois de consultar os arquivos kl realmente usados, você pode usar cat para visualizar os arquivos internos.

Por exemplo, parte das informações encontradas no arquivo /system/usr/keylayout/mtk-kpd.kl em cat é a seguinte:


key 56    ALT_LEFT
key 100   ALT_RIGHT
key 42    SHIFT_LEFT
key 54    SHIFT_RIGHT
key 57    SPACE
key 58    SOFT_RIGHT
key 465      LAST_CHANNEL
key 402      CHANNEL_UP
key 403      CHANNEL_DOWN
key 115      VOLUME_UP //音量加
key 114      VOLUME_DOWN //音量减
key 113      VOLUME_MUTE
key 28       DPAD_CENTER
key 103      DPAD_UP
key 108      DPAD_DOWN
key 105      DPAD_LEFT
key 106      DPAD_RIGHT
key 158      BACK //返回
key 139      MENU //菜单
key 102      HOME //主页
key 398      PROG_RED
key 399      PROG_GREEN
key 400      PROG_YELLOW
key 401      PROG_BLUE
key 165      MEDIA_PREVIOUS
key 163      MEDIA_NEXT
key 168      MEDIA_REWIND
key 208      MEDIA_FAST_FORWARD
key 164      MEDIA_PLAY_PAUSE
key 166      MEDIA_STOP
key 167      MEDIA_RECORD

key 155      ENVELOPE
key 12       MINUS
key 13       EQUALS
key 215      AT
key 130      ZOOM_IN
key 131      ZOOM_OUT
#key 15       BACK
key 466      TV_INPUT
key 111      PAGE_UP
key 112      PAGE_DOWN
key 358      INFO
key 213      CAPTIONS
key 214      MEDIA_AUDIO_TRACK
key 216      NUM_LOCK
key 217      GUIDE

4、cat /dev/input/eventX

Isso fica distorcido quando visualizado em um telefone celular com Android 19 a 13. Não tenho certeza se é um problema de versão do Android ou um problema específico de código do sistema.
Já vi isso há muito tempo: os logs impressos são iguais aos do getevent, mas apenas um determinado tipo de dados é impresso.

Na verdade, se você quiser imprimir os eventos de um determinado evento, poderá filtrá-los e exibi-los através do grep.
Por exemplo, você precisa exibir apenas o log dos principais eventos:

getevent | grep event1

5. getevent outros comandos

1|console:/ # getevent -help                                                   
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device] //这里提示可以多个一起打印
    -t: show time stamps  //显示时间戳
    -n: don't print newlines  //不要打印换行符
    -s: print switch states for given bits //打印给定位的开关状态
    -S: print all switch states  //打印所有开关状态
    -v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64) //详细掩码(错误=1,dev=2,名称=4,信息=8,错误=16,位置事件=32,道具=64)
    -d: show HID descriptor, if available //显示HID描述符(如果可用)
    -p: show possible events (errs, dev, name, pos. events) //显示可能的事件(错误、开发、名称、位置事件)
    -i: show all device info and possible events //显示所有设备信息和可能的事件 , 包含dumpsys input 的主要信息
    -l: label event types and names in plain text //用纯文本标记事件类型和名称
    -q: quiet (clear verbosity mask) //安静(清晰冗长的掩码)
    -c: print given number of events then exit //打印给定数量的事件,然后退出
    -r: print rate events are received 接收到打印速率事件
1|console:/ # 

O comando acima pode imprimir várias vezes ao mesmo tempo, mas a maioria deles nunca foi usada antes!

6、Evento-chave de entrada XX

O comando de entrada é provavelmente usado por muitas pessoas. O comando mais comumente usado é o texto de entrada XX, e o evento-chave de entrada XX é provavelmente usado com menos frequência.

input keyevent XX //O valor XX aqui é o valor subjacente, não o valor definido no kl superior

por exemplo:

input keyevent 24 //音量加,上层是 115
input keyevent 25 //音量减,上层是 114
input keyevent 3 //Home.上层是 102

Para entrada de eventos pela porta serial, a impressão getevent não será mais recebida.

Não há correlação entre os valores das camadas superior e inferior, eles definem seus respectivos valores em dois arquivos diferentes (começando em 1 e adicionando após a conclusão) e são relacionados por meio de strings.

3. Modificação de exemplo simples

Em cenários reais, pode ser necessário substituir a função específica de um determinado botão,
como alterar a função do botão “Enter” do teclado para a função “OK”; remover o botão Home ou substituir o botão Home por outras funções .

Aqui está uma modificação simples, o botão de diminuir volume é alterado para a função do botão de aumentar volume:

修改:/system/usr/keylayout/mtk-kpd.kl 

key 115      VOLUME_UP //音量加
key 114      VOLUME_UP //音量减,修改成音量加功能字符串

A maneira de implementar a modificação é extrair o arquivo e, em seguida, enviá-lo ou usar a função busybox vi XXX, ambas exigindo permissões de root!

Esta é apenas uma função de verificação de teste, não existe um cenário real para tais mudanças.

Após reiniciar o dispositivo, pressione o botão de aumentar ou diminuir volume e o volume aumentará. Prove que a modificação está correta.

Isso também mostra que no arquivo kl, as instruções de string são as instruções recebidas pela camada inferior.

A chave 115 definida aqui na camada superior é apenas o valor correspondente na camada superior.
A camada inferior na verdade tem seu próprio valor. Por exemplo, o valor inferior do botão de volume mais é 24.

Se quiser adicionar valores-chave personalizados, você pode consultar: https://www.likecs.com/show-258237.html

4. Resumo

1. Veja os comandos básicos das teclas

	getevent //查看所有键值事件的键值数值
	getevent -l //查看所有键值事件的键值字符串
	dumsys input //查看输入事件的相关信息,event对于的名称等信息

2. Adaptação e modificação de funções principais

1、通过"getevent"查看事件节点和节点名称;
2、通过"dumpsys input"查看节点的具体使能的kl文件;
3、修改kl文件适配功能;

Acho que você gosta

Origin blog.csdn.net/wenzhi20102321/article/details/132922275
Recomendado
Clasificación