mirror of
https://github.com/yume-chan/ya-webadb.git
synced 2025-10-03 17:59:50 +02:00
feat(bin): add cmd wrapper
This commit is contained in:
parent
9c5d2d8a5c
commit
225e369f53
19 changed files with 511 additions and 332 deletions
67
libraries/android-bin/src/cmd.ts
Normal file
67
libraries/android-bin/src/cmd.ts
Normal file
|
@ -0,0 +1,67 @@
|
|||
import type { Adb, AdbSubprocessProtocolConstructor } from "@yume-chan/adb";
|
||||
import {
|
||||
AdbCommandBase,
|
||||
AdbFeature,
|
||||
AdbSubprocessNoneProtocol,
|
||||
AdbSubprocessShellProtocol,
|
||||
} from "@yume-chan/adb";
|
||||
|
||||
export class Cmd extends AdbCommandBase {
|
||||
private _supportsShellV2: boolean;
|
||||
private _supportsCmd: boolean;
|
||||
private _supportsAbb: boolean;
|
||||
private _supportsAbbExec: boolean;
|
||||
|
||||
public get supportsShellV2() {
|
||||
return this._supportsShellV2;
|
||||
}
|
||||
public get supportsCmd() {
|
||||
return this._supportsCmd;
|
||||
}
|
||||
public get supportsAbb() {
|
||||
return this._supportsAbb;
|
||||
}
|
||||
public get supportsAbbExec() {
|
||||
return this._supportsAbbExec;
|
||||
}
|
||||
|
||||
public constructor(adb: Adb) {
|
||||
super(adb);
|
||||
this._supportsShellV2 = adb.supportsFeature(AdbFeature.ShellV2);
|
||||
this._supportsCmd = adb.supportsFeature(AdbFeature.Cmd);
|
||||
this._supportsAbb = adb.supportsFeature(AdbFeature.Abb);
|
||||
this._supportsAbbExec = adb.supportsFeature(AdbFeature.AbbExec);
|
||||
}
|
||||
|
||||
public async spawn(
|
||||
shellProtocol: boolean,
|
||||
command: string,
|
||||
...args: string[]
|
||||
) {
|
||||
let supportAbb: boolean;
|
||||
let supportCmd: boolean = this.supportsCmd;
|
||||
let service: string;
|
||||
let Protocol: AdbSubprocessProtocolConstructor;
|
||||
if (shellProtocol) {
|
||||
supportAbb = this._supportsAbb;
|
||||
supportCmd &&= this.supportsShellV2;
|
||||
service = "abb";
|
||||
Protocol = AdbSubprocessShellProtocol;
|
||||
} else {
|
||||
supportAbb = this._supportsAbbExec;
|
||||
service = "abb_exec";
|
||||
Protocol = AdbSubprocessNoneProtocol;
|
||||
}
|
||||
|
||||
if (supportAbb) {
|
||||
const socket = await this.adb.createSocket(
|
||||
`${service}:${command}\0${args.join("\0")}\0`
|
||||
);
|
||||
return new Protocol(socket);
|
||||
} else if (supportCmd) {
|
||||
return Protocol.raw(this.adb, `cmd ${command} ${args.join(" ")}`);
|
||||
} else {
|
||||
throw new Error("Not supported");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue