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的缓冲数据给消费掉。可以用下面的方法进行处理。
类似的问题已经转的满地都是,但是实际运用中却总有人布好好多坑。。
具体可以参考这里http://stackoverflow.com/questions/5483830/process-waitfor-never-returns
下面我们看个实例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
相关文章推荐
- android应用执行需要root权限的shell命令
- Android 手机执行shell命令
- Android执行shell命令(top查看CPU信息)
- android 执行shell命令代码
- Android执行shell命令详解
- android应用程序执行shell脚本命令
- Android shell 命令总结
- Android Java执行Shell命令
- Android中使用代码执行shell命令
- Android shell 命令总结
- Android或Java应用中如何以默认用户或root用户执行Shell命令
- android执行shell命令
- 我们可以通过两种方式进入Android的console: 1. 直接执行命令emulator -shell; 2.
- java本地调用cmd,shell命令,远程调用Linux执行命令方法总结
- android 执行命令的shell工具类
- android执行shell命令,top 命令解析
- Android java代码中如何执行shell命令
- Android执行shell命令
- batT脚本如何自动执行 adb shell 以后的命令(android抓包)
- Android 执行 adb shell 命令