diff --git a/pom.xml b/pom.xml index cf3ea1c..acd493c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.daxiang agent - 0.8.0 + 0.8.1 jar diff --git a/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java b/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java index e79f3a0..2aa66a3 100644 --- a/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java +++ b/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java @@ -214,6 +214,11 @@ private void pushScrcpyToDevice() throws Exception { iDevice.executeShellCommand(chmodCmd, new NullOutputReceiver()); } + // android.view.MotionEvent + private static final byte ACTION_DOWN = 0; + private static final byte ACTION_UP = 1; + private static final byte ACTION_MOVE = 2; + public void touchDown(int x, int y, int screenWidth, int screenHeight) { commitTouchEvent(ACTION_DOWN, x, y, screenWidth, screenHeight); } @@ -226,35 +231,12 @@ public void moveTo(int x, int y, int screenWidth, int screenHeight) { commitTouchEvent(ACTION_MOVE, x, y, screenWidth, screenHeight); } - public void home() { - commitKeycode(KEYCODE_HOME); - } - - public void back() { - commitKeycode(KEYCODE_BACK); - } - - public void menu() { - commitKeycode(KEYCODE_MENU); - } - - public void power() { - commitKeycode(KEYCODE_POWER); - } - // Scrcpy.server ControlMessage - private static final int TYPE_INJECT_TOUCH_EVENT = 2; - private static final int TYPE_INJECT_KEYCODE = 0; - - // android.view.MotionEvent - private static final int ACTION_DOWN = 0; - private static final int ACTION_UP = 1; - private static final int ACTION_MOVE = 2; - + private static final byte TYPE_INJECT_TOUCH_EVENT = 2; private ByteBuffer touchEventBuffer = ByteBuffer.allocate(28); // Scrcpy.server ControlMessageReader.parseInjectTouchEvent - private void commitTouchEvent(int actionType, int x, int y, int screenWidth, int screenHeight) { + private void commitTouchEvent(byte actionType, int x, int y, int screenWidth, int screenHeight) { // Scrcpy.server Device.computeVideoSize // 由于H264只接收8的倍数的宽高,所以scrcpy重新计算了video size // scrcpy输出的video size不能直接拿来用,否则会出现commitTouchEvent无效的问题 @@ -266,8 +248,8 @@ private void commitTouchEvent(int actionType, int x, int y, int screenWidth, int touchEventBuffer.rewind(); - touchEventBuffer.put((byte) TYPE_INJECT_TOUCH_EVENT); - touchEventBuffer.put((byte) actionType); + touchEventBuffer.put(TYPE_INJECT_TOUCH_EVENT); + touchEventBuffer.put(actionType); touchEventBuffer.putLong(-1L); // pointerId touchEventBuffer.putInt(x); touchEventBuffer.putInt(y); @@ -279,27 +261,22 @@ private void commitTouchEvent(int actionType, int x, int y, int screenWidth, int commit(touchEventBuffer.array()); } - // android.view.KeyEvent - private static final int KEYCODE_HOME = 3; - private static final int KEYCODE_BACK = 4; - private static final int KEYCODE_MENU = 82; - private static final int KEYCODE_POWER = 26; - private static final int KEY_EVENT_ACTION_DOWN = 0; - private static final int KEY_EVENT_ACTION_UP = 1; - + private static final byte KEY_EVENT_ACTION_DOWN = 0; + private static final byte KEY_EVENT_ACTION_UP = 1; + private static final byte TYPE_INJECT_KEYCODE = 0; private ByteBuffer keycodeBuffer = ByteBuffer.allocate(20); // Scrcpy.server ControlMessageReader.parseInjectKeycode - private void commitKeycode(int keycode) { + public void commitKeycode(int keycode) { keycodeBuffer.rewind(); - keycodeBuffer.put((byte) TYPE_INJECT_KEYCODE); - keycodeBuffer.put((byte) KEY_EVENT_ACTION_DOWN); // 按下 + keycodeBuffer.put(TYPE_INJECT_KEYCODE); + keycodeBuffer.put(KEY_EVENT_ACTION_DOWN); // 按下 keycodeBuffer.putInt(keycode); // keycode keycodeBuffer.putInt(0); // metaState - keycodeBuffer.put((byte) TYPE_INJECT_KEYCODE); - keycodeBuffer.put((byte) KEY_EVENT_ACTION_UP); // 抬起 + keycodeBuffer.put(TYPE_INJECT_KEYCODE); + keycodeBuffer.put(KEY_EVENT_ACTION_UP); // 抬起 keycodeBuffer.putInt(keycode); // keycode keycodeBuffer.putInt(0); // metaState diff --git a/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java b/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java index 5e6fe8a..04eb30e 100644 --- a/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java +++ b/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java @@ -60,25 +60,16 @@ public void onMessage(String msg) { String operation = message.getString("operation"); switch (operation) { case "m": - scrcpy.moveTo(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height")); + scrcpy.moveTo(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height")); break; case "d": - scrcpy.touchDown(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height")); + scrcpy.touchDown(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height")); break; case "u": - scrcpy.touchUp(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height")); + scrcpy.touchUp(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height")); break; - case "home": - scrcpy.home(); - break; - case "back": - scrcpy.back(); - break; - case "power": - scrcpy.power(); - break; - case "menu": - scrcpy.menu(); + case "k": + scrcpy.commitKeycode(message.getIntValue("keycode")); break; } } diff --git a/src/main/java/com/daxiang/websocket/AndroidStfSocketServer.java b/src/main/java/com/daxiang/websocket/AndroidStfSocketServer.java index ca2dbae..a1665c7 100644 --- a/src/main/java/com/daxiang/websocket/AndroidStfSocketServer.java +++ b/src/main/java/com/daxiang/websocket/AndroidStfSocketServer.java @@ -5,8 +5,6 @@ import com.daxiang.App; import com.daxiang.core.mobile.android.AndroidDevice; import io.appium.java_client.android.AndroidDriver; -import io.appium.java_client.android.nativekey.AndroidKey; -import io.appium.java_client.android.nativekey.KeyEvent; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -79,26 +77,17 @@ public void onMessage(String msg) { switch (operation) { case "m": androidDevice.getMinitouch() - .moveTo(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height")); + .moveTo(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height")); break; case "d": androidDevice.getMinitouch() - .touchDown(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height")); + .touchDown(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height")); break; case "u": androidDevice.getMinitouch().touchUp(); break; - case "home": - ((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.HOME)); - break; - case "back": - ((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.BACK)); - break; - case "power": - ((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.POWER)); - break; - case "menu": - ((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.MENU)); + case "k": + ((AndroidDriver) androidDevice.getDriver()).pressKeyCode(message.getIntValue("keycode")); break; } }