Explicação detalhada de comandos comuns para visualizar informações importantes no Android
Diretório de artigos
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文件适配功能;