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

1,413 阅读2分钟

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