project: 增加web和adb控制,未测试

This commit is contained in:
2026-07-17 19:17:10 +08:00
parent 5fb7b58fc3
commit b8edd5eff5
49 changed files with 5061 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
package com.ttstd.adbloopback;
import com.ttstd.adbloopback.adb.AdbConnection;
import com.ttstd.adbloopback.adb.AdbKeyPair;
import com.ttstd.adbloopback.adb.AdbPairing;
import com.ttstd.adbloopback.adb.AdbStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
/**
* ADB 管理器:封装密钥持久化、配对、连接及 Shell 指令执行。
* 它是上层 UI 与底层 ADB 协议库之间的桥梁。
*/
public class AdbManager {
private final File privateKeyFile;
private final File publicKeyFile;
private AdbKeyPair keyPair;
private AdbConnection connection;
public AdbManager(File filesDir) {
this.privateKeyFile = new File(filesDir, "adb_private.key");
this.publicKeyFile = new File(filesDir, "adb_public.key");
loadOrCreateKeyPair();
}
private void loadOrCreateKeyPair() {
try {
if (privateKeyFile.exists() && publicKeyFile.exists()) {
keyPair = AdbKeyPair.read(privateKeyFile, publicKeyFile);
} else {
keyPair = AdbKeyPair.generate();
keyPair.write(privateKeyFile, publicKeyFile);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/** 发起无线调试配对TLS-PSK */
public void pair(int port, String pairingCode) throws Exception {
AdbPairing.pair("127.0.0.1", port, pairingCode, keyPair);
}
/** 连接无线调试主端口 */
public void connect(int port) throws Exception {
if (connection != null) {
try { connection.close(); } catch (Exception ignored) {}
}
connection = AdbConnection.connect("127.0.0.1", port, keyPair);
}
/** 断开连接 */
public void disconnect() {
if (connection != null) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
connection = null;
}
}
/** 执行 Shell 命令并获取全部输出 */
public String execShell(String command) throws Exception {
if (connection == null || !connection.isConnected()) {
throw new IOException("ADB 未连接");
}
AdbStream stream = connection.open("shell:" + command);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] data;
while ((data = stream.read()) != null) {
bos.write(data);
}
stream.close();
return bos.toString("UTF-8");
}
/** 快速发送点击指令 */
public void tap(int x, int y) throws Exception {
execShell("input tap " + x + " " + y);
}
public boolean isConnected() {
return connection != null && connection.isConnected();
}
}