美文网首页android技术
Android 模拟点击 按键精灵 ADB方案

Android 模拟点击 按键精灵 ADB方案

作者: 靠睡大觉创新高 | 来源:发表于2021-04-07 11:58 被阅读0次

    Android 模拟点击的方案

    • 模拟MotionEvent
    • ADB控制
    • Instrumentation
    • 通过使用sendevent
      这里我们只讨论ADB控制方案,因为这个方案可以点击本APP以外的东西

    前提条件:Room权限

    你可以下载“雷电模拟器”等其他第三方模拟器,这些模拟器都是默认开启Room的。
    你也可以使用小米手机,解锁申请解锁小米手机 (miui.com) 然后获取room权限听说解锁后不保修,请谨慎解锁


    正文

    0.检查是否拥有Root权限

    1.代码执行ADB

        /**
         * 执行ADB指令,不返回结果
         *
         * @param cmd
         */
        private void execShellCmd(String cmd) {
    
            try {
                // 申请获取root权限,这一步很重要,不然会没有作用
                Process process = Runtime.getRuntime().exec("su");
                // 获取输出流
                OutputStream outputStream = process.getOutputStream();
                DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
                dataOutputStream.writeBytes(cmd);
                dataOutputStream.flush();
                dataOutputStream.close();
                outputStream.close();
            } catch (Throwable t) {
                Log.e("liu0408", "t = " + t.getMessage());
            }
        }
    
        /**
         * 执行ADB指令,返回结果
         *
         * @param cmd
         */
        public static String execShellCmd(String cmd) {
            String result = "";
            DataOutputStream dos = null;
            DataInputStream dis = null;
    
            try {
                Process p = Runtime.getRuntime().exec("su");// 经过Root处理的android系统即有su命令
                dos = new DataOutputStream(p.getOutputStream());
                dis = new DataInputStream(p.getInputStream());
    
                dos.writeBytes(cmd + "\n");
                dos.flush();
                dos.writeBytes("exit\n");
                dos.flush();
                String line;
                while ((line = dis.readLine()) != null) {
                    result += line;
                }
                p.waitFor();
            } catch (Exception e) {
    
            } finally {
                try {
                    if (dos != null) {
                        dos.close();
                    }
                    if (dis != null) {
                        dis.close();
                    }
                } catch (Exception e) {
    
                }
            }
            return result;
        }
    

    示例:点击屏幕 210代表X点 970代表Y点

    execShellCmd("input tap 210 970");
    

    其他ADB指令

    • 输入内容
    input text "你好"
    
    • 点击
    input tap 933 184
    
    • 滑动
    input swipe <x1> <y1> <x2> <y2>
    
    • 模拟 手机的按键
    //点击Home键
    input keyevent 3
    

    KEYCODE_MENU 1
    KEYCODE_SOFT_RIGHT 2
    KEYCODE_HOME 3
    KEYCODE_BACK 4
    KEYCODE_CALL 5
    KEYCODE_ENDCALL 6
    KEYCODE_0 7
    KEYCODE_1 8
    KEYCODE_2 9
    KEYCODE_3 10
    KEYCODE_4 11
    KEYCODE_5 12
    KEYCODE_6 13
    KEYCODE_7 14
    KEYCODE_8 15
    KEYCODE_9 16
    KEYCODE_STAR 17
    KEYCODE_POUND 18
    KEYCODE_DPAD_UP 19
    KEYCODE_DPAD_DOWN 20
    KEYCODE_DPAD_LEFT 21
    KEYCODE_DPAD_RIGHT 22
    KEYCODE_DPAD_CENTER 23
    KEYCODE_VOLUME_UP 24
    KEYCODE_VOLUME_DOWN 25
    KEYCODE_POWER 26
    KEYCODE_CAMERA 27
    KEYCODE_CLEAR 28
    KEYCODE_A 29
    KEYCODE_B 30
    KEYCODE_C 31
    KEYCODE_D 32
    KEYCODE_E 33
    KEYCODE_F 34
    KEYCODE_G 35
    KEYCODE_H 36
    KEYCODE_I 37
    KEYCODE_J 38
    KEYCODE_K 39
    KEYCODE_L 40
    KEYCODE_M 41
    KEYCODE_N 42
    KEYCODE_O 43
    KEYCODE_P 44
    KEYCODE_Q 45
    KEYCODE_R 46
    KEYCODE_S 47
    KEYCODE_T 48
    KEYCODE_U 49
    KEYCODE_V 50
    KEYCODE_W 51
    KEYCODE_X 52
    KEYCODE_Y 53
    KEYCODE_Z 54
    KEYCODE_COMMA 55
    KEYCODE_PERIOD 56
    KEYCODE_ALT_LEFT 57
    KEYCODE_ALT_RIGHT 58
    KEYCODE_SHIFT_LEFT 59
    KEYCODE_SHIFT_RIGHT 60
    KEYCODE_TAB 61
    KEYCODE_SPACE 62
    KEYCODE_SYM 63
    KEYCODE_EXPLORER 64
    KEYCODE_ENVELOPE 65
    KEYCODE_ENTER 66
    KEYCODE_DEL 67
    KEYCODE_GRAVE 68
    KEYCODE_MINUS 69
    KEYCODE_EQUALS 70
    KEYCODE_LEFT_BRACKET 71
    KEYCODE_RIGHT_BRACKET 72
    KEYCODE_BACKSLASH 73
    KEYCODE_SEMICOLON 74
    KEYCODE_APOSTROPHE 75
    KEYCODE_SLASH 76
    KEYCODE_AT 77
    KEYCODE_NUM 78
    KEYCODE_HEADSETHOOK 79
    KEYCODE_FOCUS 80
    KEYCODE_PLUS 81
    KEYCODE_MENU 82
    KEYCODE_NOTIFICATION 83
    KEYCODE_SEARCH 84
    TAG_LAST_KEYCODE 85

    以上基本就可以解决大部分问题了,感兴趣想瞎聊的给我邮件,我看见了就回复你742831652@qq.com

    相关文章

      网友评论

        本文标题:Android 模拟点击 按键精灵 ADB方案

        本文链接:https://www.haomeiwen.com/subject/onaykltx.html