libsuperuser 实时获取命令输出
libsuperuser get command output in real time
我从未使用过 libsuperuser,只使用过 roottools。现在我想切换到 libsuperuser,但我找不到以 root 身份调用命令并读取其输出而无需等待命令完成的方法。
使用 roottools 很容易,因为它有一个方法,每次进程将新行写入 stdout 时都会调用该方法。
但是对于 libsuperuser 我只发现 Shell.SU.run()
那 returns 输出但只有当过程完成时。如何使用 libsuperuser 实时读取输出行?
您必须使用 Shell.Interactive.addCommand()
及其回调:
Shell.Interactive rootSession = new Shell.Builder().useSU().open(/*...*/);
会话打开后,您可以添加命令:
rootSession.addCommand(new String[] { "ls -l /sdcard" },
1, // a command id
new Shell.OnCommandLineListener() {
@Override
public void onCommandResult(int commandCode, int exitCode) {
// ...
}
@Override
public void onLine(String line) {
// ...
}
});
onLine(String line)
就是您要找的。
从 Chainfire 的 libsuperuser 存储库中查看 sample code "InteractiveActivity"。
我从未使用过 libsuperuser,只使用过 roottools。现在我想切换到 libsuperuser,但我找不到以 root 身份调用命令并读取其输出而无需等待命令完成的方法。
使用 roottools 很容易,因为它有一个方法,每次进程将新行写入 stdout 时都会调用该方法。
但是对于 libsuperuser 我只发现 Shell.SU.run()
那 returns 输出但只有当过程完成时。如何使用 libsuperuser 实时读取输出行?
您必须使用 Shell.Interactive.addCommand()
及其回调:
Shell.Interactive rootSession = new Shell.Builder().useSU().open(/*...*/);
会话打开后,您可以添加命令:
rootSession.addCommand(new String[] { "ls -l /sdcard" },
1, // a command id
new Shell.OnCommandLineListener() {
@Override
public void onCommandResult(int commandCode, int exitCode) {
// ...
}
@Override
public void onLine(String line) {
// ...
}
});
onLine(String line)
就是您要找的。
从 Chainfire 的 libsuperuser 存储库中查看 sample code "InteractiveActivity"。