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;
}
}