因工做緣由,須要用到模擬輸入這個東東,查閱了一些資料,實現方式有多種,我大概分爲兩類,命令行類和程序類。android
命令行類包括自動化測試組件monkeyrunner,getevent/setevent命令,input命令shell
程序類包括MotionEvent,AccessibilityService,反射等測試
本人對這塊也是剛剛接觸,幾種方式不評優劣,僅就工做中用到的知識點作記錄,以備後用。spa
一、命令行開啓和關閉應用命令行
adb shell am start -n 包名/入口activity //開啓某個應用 adb shell am force-stop 包名 //關閉某個應用
二、input命令參數code
Usage: input [<source>] <command> [<arg>...] The sources are: trackball //滾動球 joystick //操縱桿 touchnavigation //觸摸導航 mouse //鼠標 keyboard //鍵盤 gamepad //手柄 touchpad //觸摸板 dpad //模擬手柄 stylus //尖筆 touchscreen //觸摸屏 The commands and default sources are: text <string> (Default: touchscreen) //輸入文字 keyevent [--longpress] <key code number or name> ... (Default: keyboard) //鍵盤操做 tap <x> <y> (Default: touchscreen) //點擊 swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen) //滑動操做 press (Default: trackball) roll <dx> <dy> (Default: trackball)
其中咱們經常使用的就是keyboard和touchscreen,用起來也很簡單。blog
三、keyevent值對應表ip
0 --> "KEYCODE_UNKNOWN" 1 --> "KEYCODE_MENU" 2 --> "KEYCODE_SOFT_RIGHT" 3 --> "KEYCODE_HOME" 4 --> "KEYCODE_BACK" 5 --> "KEYCODE_CALL" 6 --> "KEYCODE_ENDCALL" 7 --> "KEYCODE_0" 8 --> "KEYCODE_1" 9 --> "KEYCODE_2" 10 --> "KEYCODE_3" 11 --> "KEYCODE_4" 12 --> "KEYCODE_5" 13 --> "KEYCODE_6" 14 --> "KEYCODE_7" 15 --> "KEYCODE_8" 16 --> "KEYCODE_9" 17 --> "KEYCODE_STAR" 18 --> "KEYCODE_POUND" 19 --> "KEYCODE_DPAD_UP" 20 --> "KEYCODE_DPAD_DOWN" 21 --> "KEYCODE_DPAD_LEFT" 22 --> "KEYCODE_DPAD_RIGHT" 23 --> "KEYCODE_DPAD_CENTER" 24 --> "KEYCODE_VOLUME_UP" 25 --> "KEYCODE_VOLUME_DOWN" 26 --> "KEYCODE_POWER" 27 --> "KEYCODE_CAMERA" 28 --> "KEYCODE_CLEAR" 29 --> "KEYCODE_A" 30 --> "KEYCODE_B" 31 --> "KEYCODE_C" 32 --> "KEYCODE_D" 33 --> "KEYCODE_E" 34 --> "KEYCODE_F" 35 --> "KEYCODE_G" 36 --> "KEYCODE_H" 37 --> "KEYCODE_I" 38 --> "KEYCODE_J" 39 --> "KEYCODE_K" 40 --> "KEYCODE_L" 41 --> "KEYCODE_M" 42 --> "KEYCODE_N" 43 --> "KEYCODE_O" 44 --> "KEYCODE_P" 45 --> "KEYCODE_Q" 46 --> "KEYCODE_R" 47 --> "KEYCODE_S" 48 --> "KEYCODE_T" 49 --> "KEYCODE_U" 50 --> "KEYCODE_V" 51 --> "KEYCODE_W" 52 --> "KEYCODE_X" 53 --> "KEYCODE_Y" 54 --> "KEYCODE_Z" 55 --> "KEYCODE_COMMA" 56 --> "KEYCODE_PERIOD" 57 --> "KEYCODE_ALT_LEFT" 58 --> "KEYCODE_ALT_RIGHT" 59 --> "KEYCODE_SHIFT_LEFT" 60 --> "KEYCODE_SHIFT_RIGHT" 61 --> "KEYCODE_TAB" 62 --> "KEYCODE_SPACE" 63 --> "KEYCODE_SYM" 64 --> "KEYCODE_EXPLORER" 65 --> "KEYCODE_ENVELOPE" 66 --> "KEYCODE_ENTER" 67 --> "KEYCODE_DEL" 68 --> "KEYCODE_GRAVE" 69 --> "KEYCODE_MINUS" 70 --> "KEYCODE_EQUALS" 71 --> "KEYCODE_LEFT_BRACKET" 72 --> "KEYCODE_RIGHT_BRACKET" 73 --> "KEYCODE_BACKSLASH" 74 --> "KEYCODE_SEMICOLON" 75 --> "KEYCODE_APOSTROPHE" 76 --> "KEYCODE_SLASH" 77 --> "KEYCODE_AT" 78 --> "KEYCODE_NUM" 79 --> "KEYCODE_HEADSETHOOK" 80 --> "KEYCODE_FOCUS" 81 --> "KEYCODE_PLUS" 82 --> "KEYCODE_MENU" 83 --> "KEYCODE_NOTIFICATION" 84 --> "KEYCODE_SEARCH" 85 --> "TAG_LAST_KEYCODE"
四、getevent/sendeventget
首先執行getevent -p命令獲取android設備上全部的input設備,找到screen設備input
執行getevent 設備編號,在屏幕上作操做,記錄getevent的結果。
type,code,value 0003 0036 000002a4
須要注意的是getevent獲取的值是16進制的,sendevent發送的是10進制,須要作一下轉換