由于钉钉获取到的拆红包节点ImageButton无法定位到中间那个“拆红包”,所以无法直接通过Node的performClick执行模拟点击。以下是微信的“拆红包”和钉钉的“拆红包”:
所以此处做的处理是获取Root执行点击的命令,这里针对钉钉做出的特殊处理,应该算是本应用的一大败笔。
privatefinalstatic String FORMAT_CMD_TAP ="input tap %1$s %2$s";/** * 执行shell命令 * * @param cmd */publicstaticvoidexecShellCmd(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) { t.printStackTrace(); } }/** * 执行点击 * * @param posX 相对屏幕的x轴* @param posY 相对屏幕的y轴*/publicstaticvoidexecTap(int posX,int posY) { String cmd = String.format(FORMAT_CMD_TAP, posX, posY); execShellCmd(cmd); }

下载地址