我从未使用过libsuperuser,而仅使用过roottools。现在,我想切换到libsuperuser,但是我没有找到一种方法来以root身份调用命令并读取命令的输出,而无需等待命令完成。
使用roottools很容易,因为它有一个方法,该方法每次在进程中将新行写入stdout时都被调用。
但是,使用libsuperuser时,我仅找到Shell.SU.run(),但仅在过程完成时才返回输出。如何使用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"

07-26 04:03