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