/** * APK installation — a HOST verb (`pi-gui android install`), never the driver's. * * The driver observes and acts on what is on screen; putting an app there is lifecycle, * and lifecycle lives in the `android` CLI (same charter as start/stop). The flags are * what app-under-test flows want: `-r` reinstall keeping data, `-t` allow test APKs, * `-g` grant runtime permissions up front so the agent's first run isn't a wall of * permission dialogs. adb's failure codes are translated to something a host can show * a person — `INSTALL_FAILED_NO_MATCHING_ABIS` says "wrong architecture", not itself. */ import { type ExecFn } from "./adb.ts"; /** A person-readable reason for an adb install failure, or null (show the raw output). */ export declare function explainInstallFailure(output: string): string | null; export interface InstallApkOptions { apk: string; /** Explicit target; unset ⇒ the one running emulator (several ⇒ refuse, name one). */ serial?: string; exec?: ExecFn; timeoutMs?: number; } export declare function installApk(opts: InstallApkOptions): Promise<{ serial: string; apk: string; }>;