我正在开发一个必须读取受保护文件夹内容的小型应用程序,因此我得出结论,我必须将 su 与 ls 和输入流结合使用。
但是,当 readLine 函数到达输出的末尾时,它只是挂起。我猜这是因为最后一行不包含 EOL 标记...
代码:
p = Runtime.getRuntime().exec("su");
outputS = new DataOutputStream(p.getOutputStream());
inputS = new DataInputStream(p.getInputStream());
errorS = new DataInputStream(p.getErrorStream());
outputS.writeBytes("ls /datadata" + "\n");
outputS.flush();
while((s = inputS.readLine()) != null)
{
Log.i("DS", s);
}
Log.i("DS", "done");
我怎样才能解决这个问题?我试过读取字符然后等待-1,但这不起作用,和上面一样。理想情况下,我会在没有系统调用的情况下执行此操作,但遗憾的是 Android 不会让我列出或复制此文件夹的内容...
感谢您阅读本文,昆特
编辑:感谢下面的答案,我解决了我的问题,无论你做什么,只要确保你结束“su”任务,就像你在使用 adb shell 时所做的那样。您可以使用接受的答案中描述的方法,也可以在完成所需的任何操作后手动运行“退出”。由于我不知道的原因,运行 exit 确实会在错误流中生成两个空行。