循环读取"ls /datadata"输出



我正在开发一个必须读取受保护文件夹内容的小应用程序,因此我得出的结论是,我必须将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"。运行exit会在错误流中生成两行空行,原因我不知道。

su仍在等待更多命令执行

可以告诉su只执行一条命令,然后退出。把

p = Runtime.getRuntime().exec("su");

p = Runtime.getRuntime().exec(new String[]{"su", "-c", "ls /datadata"});

和删除outputS...

相关内容

  • 没有找到相关文章

最新更新