通过Android应用程序获取执行命令的输出

时间:2015-06-19 15:57:26

标签: java android linux command-line root

我正在执行以下代码,在我正在创建的Android应用程序中执行linux命令:

public void RunAsRoot(String[] cmds){
            Process p = Runtime.getRuntime().exec("su");
            DataOutputStream os = new DataOutputStream(p.getOutputStream());            
            for (String tmpCmd : cmds) {
                    os.writeBytes(tmpCmd+"\n");
            }           
            os.writeBytes("exit\n");  
            os.flush();
}

我想知道是否有办法知道命令在执行后返回的内容。例如,如果我做“ls”,我想看看命令通常会输出什么。

2 个答案:

答案 0 :(得分:2)

试试这段代码:

try {
  Process process = Runtime.getRuntime().exec("ls");
  BufferedReader bufferedReader = new BufferedReader(
  new InputStreamReader(process.getInputStream()));

  StringBuilder result=new StringBuilder();
  String line = "";
  while ((line = bufferedReader.readLine()) != null) {
    result.append(line);
  }
  TextView tv = (TextView)findViewById(R.id.textView1);
  tv.setText(result.toString());
  } 
catch (IOException e) {}

答案 1 :(得分:0)

我们来看一个“字符串函数”的例子

String shell_exec(String  s)
     {
     String line="",output="";
     try
       {
       Process p=Runtime.getRuntime().exec(new String[]{"sh","-c",s});
       BufferedReader b=new BufferedReader(new InputStreamReader(p.getInputStream()));
       while((line=b.readLine())!=null){output+=line+"\r\n";}
       }catch(Exception e){return "error";}
     return output;
     }

现在只需使用它:

String s=shell_exec("ls /data/data/com.mycompany.myapp");