您的位置:首页 > 运维架构 > Shell

Android执行执行Shell命令总结

2014-03-04 19:43 381 查看
开发中有时需要用Java调用系统的一些命令,执行一些语言本事不具备的功能,Android开发中最常见的就是Root静默安装,通过命令修改某些目录权限等工作。我们通常会通过Runtime执行一个系统命令,返回一个process对象,然后检查这个对象的状态,了解执行结果。JavaSE调用shell命令原理也类似。

下面我们看个实例Process process;
String cmd = "chmod 777 " + f.getAbsolutePath();
process = Runtime.getRuntime().exec(cmd);
process.waitFor();到此为止,是不是就结束了呢,其实不然。调用exec会创建一个子进程来执行这个命令,如果命令输出的信息过多,会导致子进程的缓冲区被占满,命令无法进行执行下去。有兴趣可以试下。这时我们需要在调用waitFor之前将process的缓冲数据给消费掉。可以用下面的方法进行处理。
/**
* discard all stream
*/
private static void consumeStream(InputStream is) {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
try {
String str = null;
while((str = br.readLine()) != null) {

Log.v(TAG, str);

}
if (is != null) {
is.close();
}
} catch (IOException e) {
Log.v(TAG, "" + e);
}
}

类似的问题已经转的满地都是,但是实际运用中却总有人布好好多坑。。

具体可以参考这里http://stackoverflow.com/questions/5483830/process-waitfor-never-returns
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: