zoukankan      html  css  js  c++  java
  • Android 模拟输入那点事

    因工作原因,需要用到模拟输入这个东东,查阅了一些资料,实现方式有多种,我大概分为两类,命令行类和程序类。

    命令行类包括自动化测试组件monkeyrunner,getevent/setevent命令,input命令

    程序类包括MotionEvent,AccessibilityService,反射等

    本人对这块也是刚刚接触,几种方式不评优劣,仅就工作中用到的知识点做记录,以备后用。

    1、命令行开启和关闭应用

    adb shell am start -n 包名/入口activity   //开启某个应用
    adb shell am force-stop 包名               //关闭某个应用

    2、input命令参数

    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,用起来也很简单。

    3、keyevent值对应表

    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"

    4、getevent/sendevent

    首先执行getevent -p命令获取android设备上所有的input设备,找到screen设备

    执行getevent 设备编号,在屏幕上做操作,记录getevent的结果。

    type,code,value
    
    0003 0036 000002a4

    需要注意的是getevent获取的值是16进制的,sendevent发送的是10进制,需要做一下转换

  • 相关阅读:
    父子进程 signal 出现 Interrupted system call 问题
    一个测试文章
    《淘宝客户端 for Android》项目实战 html webkit android css3
    Django 中的 ForeignKey ContentType GenericForeignKey 对应的数据库结构
    coreseek 出现段错误和Unigram dictionary load Error 新情况(Gentoo)
    一个 PAM dbus 例子
    漫画统计学 T分数
    解决 paramiko 安装问题 Unable to find vcvarsall.bat
    20141202
    js
  • 原文地址:https://www.cnblogs.com/gordon0918/p/6610530.html
Copyright © 2011-2022 走看看