android开发笔记之adb shell input

缘由

最近给别的部门做项目,发现他们做了一个压力测试的脚本,是windows操作系统下的bat脚本,看了一下,发现就是用adb shell input命令来做的,好吧,那就玩一下吧。

adb shell input

adb shell
kx00:/ $ input
Usage: input [<source>] <command> [<arg>...]

The sources are: 
      keyboard
      mouse
      joystick
      touchnavigation
      touchpad
      trackball
      dpad
      stylus
      gamepad
      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)

查看bat脚本

@echo off

for /l %%i in (1,1,1500) do ( 
adb shell input swipe 240 837 240 837 8000
adb shell input tap 91 958
adb shell input tap 137 650

echo "i=%%i"
)
pause

此脚本解释:

长按点(240,837)8秒钟,此点的位置为camera应用的拍照按钮
按下返回键,回到桌面上
点击点(137,650),此点的位置为camera应用的图标
一直循环1500次

可以看出此脚本有一些不完善的地方:
第一,点的位置为固定点,不能完全匹配不同的机型,也就是说每个不同屏幕的手机,都要修改点的位置。
第二,返回的方式是使用点的方式,没有使用按键的方式。
第三,这个脚本的执行顺序也是有问题,特别是第一次执行。

修改后的sh脚本

#!/bin/bash
echo "----------test start!!!---------"
for i in {1..1000};
do
    echo $i
    echo "time:`date +%Y-%m-%d-%H-%M-%S`" 
    adb shell input tap 137 650
    adb shell input swipe 240 837 240 837 8000
    #press key KEYCODE_BACK
    #adb shell input tap 91 958
    adb shell input keyevent 4
done  

echo "----------test end!!!---------"

此脚本解释:
点击点(137,650),此点的位置为camera应用的图标
长按点(240,837)8秒钟,此点的位置为camera应用的拍照按钮
按下返回键,回到桌面上
一直循环1000次

此脚本我们调整了指令的顺序和返回的方式,比上一下脚本好一点。

我们再优化:

#!/bin/bash
echo "----------test start!!!---------"
for i in {1..1000};
do
    echo $i
    echo "time:`date +%Y-%m-%d-%H-%M-%S`" 
    #------------------------------------
    #adb shell input tap 137 650
    adb shell am start -n "com.myos.camera/.activity.CameraActivity"
    #------------------------------------
    sleep 2
    #------------------------------------
    adb shell input swipe 240 837 240 837 8000
    #------------------------------------
    #press key KEYCODE_BACK
    #adb shell input tap 91 958
    adb shell input keyevent 4
    #------------------------------------
done  

echo "----------test end!!!---------"

此脚本, 我们优化了启动camera的指令,比上面的更好一点。只是长按camera应用的拍照按钮还是使用的点的方式,每次还是要查看此点的位置。

eyevent事件

我常用到的有两个:
向左滑动屏幕 adb shell input keyevent 21
向右滑动屏幕 adb shell input keyevent 22

其他keyevent事件和对应的num如下:
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”

猜你喜欢

转载自blog.csdn.net/hfreeman2008/article/details/78915962