fixed app launcher commmand
This commit is contained in:
@@ -22,17 +22,34 @@ export class AndroidCommandExecutor {
|
|||||||
["-s", serial, "shell", "am", "force-stop", packageName],
|
["-s", serial, "shell", "am", "force-stop", packageName],
|
||||||
{ allowFailure: true },
|
{ allowFailure: true },
|
||||||
);
|
);
|
||||||
await this.run([
|
const launchActivity = await this.resolveLauncherActivity(
|
||||||
"-s",
|
|
||||||
serial,
|
serial,
|
||||||
"shell",
|
|
||||||
"monkey",
|
|
||||||
"-p",
|
|
||||||
packageName,
|
packageName,
|
||||||
"-c",
|
);
|
||||||
"android.intent.category.LAUNCHER",
|
|
||||||
"1",
|
if (launchActivity) {
|
||||||
]);
|
await this.run([
|
||||||
|
"-s",
|
||||||
|
serial,
|
||||||
|
"shell",
|
||||||
|
"am",
|
||||||
|
"start",
|
||||||
|
"-n",
|
||||||
|
launchActivity,
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
await this.run([
|
||||||
|
"-s",
|
||||||
|
serial,
|
||||||
|
"shell",
|
||||||
|
"monkey",
|
||||||
|
"-p",
|
||||||
|
packageName,
|
||||||
|
"-c",
|
||||||
|
"android.intent.category.LAUNCHER",
|
||||||
|
"1",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
return { serial };
|
return { serial };
|
||||||
}
|
}
|
||||||
@@ -54,4 +71,41 @@ export class AndroidCommandExecutor {
|
|||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async resolveLauncherActivity(
|
||||||
|
serial: string,
|
||||||
|
packageName: string,
|
||||||
|
): Promise<string | null> {
|
||||||
|
const result = await this.run(
|
||||||
|
[
|
||||||
|
"-s",
|
||||||
|
serial,
|
||||||
|
"shell",
|
||||||
|
"cmd",
|
||||||
|
"package",
|
||||||
|
"resolve-activity",
|
||||||
|
"--brief",
|
||||||
|
"-a",
|
||||||
|
"android.intent.action.MAIN",
|
||||||
|
"-c",
|
||||||
|
"android.intent.category.LAUNCHER",
|
||||||
|
packageName,
|
||||||
|
],
|
||||||
|
{ allowFailure: true },
|
||||||
|
);
|
||||||
|
|
||||||
|
const output = `${result.stdout ?? ""}\n${result.stderr ?? ""}`;
|
||||||
|
const lines = output
|
||||||
|
.split("\n")
|
||||||
|
.map((line) => line.trim())
|
||||||
|
.filter(Boolean);
|
||||||
|
|
||||||
|
for (const line of lines) {
|
||||||
|
if (line.includes("/") && !line.startsWith("priority=")) {
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,3 +102,8 @@ Update rule:
|
|||||||
- Updated frontend session polling to use the new no-touch validity path and avoid stale query cache via forced refresh behavior.
|
- Updated frontend session polling to use the new no-touch validity path and avoid stale query cache via forced refresh behavior.
|
||||||
- Added frontend session end command to explicitly release the linked device on session teardown/ejection.
|
- Added frontend session end command to explicitly release the linked device on session teardown/ejection.
|
||||||
- Updated admin link revoke flow to release the linked device after revocation so revoked sessions do not leave devices stuck `inUse`.
|
- Updated admin link revoke flow to release the linked device after revocation so revoked sessions do not leave devices stuck `inUse`.
|
||||||
|
|
||||||
|
### 15 — Orchestrator App Launch Robustness
|
||||||
|
|
||||||
|
- Updated Android launch flow in orchestrator to resolve launcher activity via `cmd package resolve-activity` and launch with `am start -n <activity>`.
|
||||||
|
- Kept `monkey` as fallback only when launcher activity cannot be resolved, reducing redroid/device-specific `monkey` failures during session prepare.
|
||||||
|
|||||||
Reference in New Issue
Block a user