上回咱們說到怎麼利用 getevent 得到 Android 的輸入事件,本次就來說明如何使用 sendevent 模擬輸入的動作。
語法 | sendevent device type code value |
---|---|
說明 | device: 輸入設備代號,如 /dev/input/event0 |
type: 須以十進位指定此值,如 EV_KEY (0x01) 為 1,EV_ABS (0x03) 為 3,參閱 input.h。 | |
code: 須以十進位指定此值,如 ABS_MT_POSITION_X (0x35) 為 53,ABS_MT_POSITION_Y (0x36) 為 54,參閱 input.h。 | |
value: 表示 code 的強度,須以十進位指定此值。 |
以在 ASUS Z00LD (Android 6.0.1) 按一次音量增大鍵為例:
C:\Users\tester>adb shell "sendevent /dev/input/event7 1 115 1; sendevent /dev/input/event7 0 0 0; sendevent /dev/input/event7 1 115 0; sendevent /dev/input/event7 0 0 0" |
此 shell 指令是由 4 個輸入事件組成:
事件順序 | 輸入事件 | 說明 |
---|---|---|
1 | sendevent /dev/input/event7 1 115 1 | 1: EV_KEY 115: KEY_VOLUMEUP 1: DOWN(由 getevent.h 的 key_value_labels 得知) |
2 | sendevent /dev/input/event7 0 0 0 | 0: EV_SYN 0: SYN_REPORT 0: SYN_REPORT 所表示的值(以 getevent 做實驗得知) |
3 | sendevent /dev/input/event7 1 115 0 | 1: EV_KEY 115: KEY_VOLUMEUP 0: UP(由 getevent.h 的 key_value_labels 得知) |
4 | sendevent /dev/input/event7 0 0 0 | 0: EV_SYN 0: SYN_REPORT 0: SYN_REPORT 所表示的值(以 getevent 做實驗得知) |
若瞭解如何以 sendevent 模擬 press 的話,相信各位看官一定能舉一反三觸類旁通,知道如何模擬長按按鍵、點擊螢幕、長按螢幕、以及拖曳等各式動作了。
但有一點必須特別注意:此方法的移植性並不高。
姑且不論輸入設備代號會因機型而異,其能響應的輸入事件也有差別,雖然這並非無解,但一旦有新機型出來,模擬腳本就會面臨較高的修改風險,所以本喵認為應該適度使用,不要過度依賴此方法。
但有一點必須特別注意:此方法的移植性並不高。
姑且不論輸入設備代號會因機型而異,其能響應的輸入事件也有差別,雖然這並非無解,但一旦有新機型出來,模擬腳本就會面臨較高的修改風險,所以本喵認為應該適度使用,不要過度依賴此方法。
沒有留言:
張貼留言