stellar 中文文档 下载 App

特权进程与 PTY:newProcess 与 newPtyProcess 的用法差异

newProcess() 在原版 Shizuku 中已被标记弃用,这里被重新启用并保留支持——直接创建特权进程仍然是很多场景最顺手的路径。

newProcess:标准特权进程

val process = Stellar.newProcess(
    arrayOf("ls", "-la", "/sdcard"),  // 命令与参数
    null,                              // 环境变量(可选)
    null                               // 工作目录(可选)
)
val reader = BufferedReader(InputStreamReader(process.inputStream))
reader.lineSequence().forEach { line -> println(line) }
val exitCode = process.waitFor()
process.destroy()

StellarRemoteProcess 提供标准的三流(stdout/stderr/stdin)与 waitFor、exitValue、destroy,另有 alive() 与带超时的 waitForTimeout。

newPtyProcess:带终端特性的进程

需要颜色输出、Ctrl+C 信号这类终端行为时用 PTY 版本:

val pty = Stellar.newPtyProcess(arrayOf("sh"), null, null)
pty.ptyFd          // 读写共用的伪终端文件描述符
pty.resize(80, 24) // 调整终端窗口大小
对比项StellarRemoteProcessStellarPtyProcess
流结构独立 stdin/stdout/stderr单一 fd 的主从伪终端
ANSI 颜色无支持
信号(如 Ctrl+C)不支持支持
输入回显无默认开启

PTY API 自 v1.0.11 加入。终端类应用(在应用里嵌 shell 界面的那种)选 PTY;一次性取输出的场景选普通版。

执行身份与超时注意

进程以服务身份(shell 或 root)执行,权限边界见服务状态解读。旧版本存在命令执行可能卡住的问题(v1.0.18 修复),长时间命令记得用 waitForTimeout 兜底,别裸等 waitFor()。