windows | Mac os | linux | 电脑故障 | 网络知识 | 电脑百科 | 破解软件 | 网页编程 | 电脑配置 |

android java如何执行linux命令

发布时间:2016-11-30

android java如何执行Linux命令?android的程序基于java开发,当我们接上调试器,执行adb shell,就可以执行linux命令,下面跟着小编来一起来了解下吧。

android java执行linux命令方法

通常有很多命令可以通过串口终端输入,得到结果,在程序中,通常我们需要得到某些命令的结果,在代码中执行命令,并将结果返回。

有两个类:CommandHelper.java和CommandResult.java 第一个类用于处理命令,第二个则用于返回一个结果

package com.example.task_aidl;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class CommandHelper {

//default time out, in millseconds

public static int DEFAULT_TIMEOUT;

public static final int DEFAULT_INTERVAL = 1000;

public static long START;

public static CommandResult exec(String command) throws IOException, InterruptedException {

Process process = Runtime.getRuntime().exec(command);//创建一个字进程,并保存在process对象中

CommandResult commandResult = wait(process);

if (process != null) {

process.destroy();

}

return commandResult;

}

private static boolean isOverTime() {

return System.currentTimeMillis() - START >= DEFAULT_TIMEOUT;

}

private static CommandResult wait(Process process) throws InterruptedException, IOException {

BufferedReader errorStreamReader = null;

BufferedReader inputStreamReader = null;

try {

errorStreamReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));

inputStreamReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

//timeout control

START = System.currentTimeMillis();

boolean isFinished = false;

for (;;) {

if (isOverTime()) {

CommandResult result = new CommandResult();

result.setExitValue(CommandResult.EXIT_VALUE_TIMEOUT);

result.setOutput("Command process timeout");

return result;

}

if (isFinished) {

CommandResult result = new CommandResult();

result.setExitValue(process.waitFor()); //process.waitFor() 表示 等这条语句执行完后再往下执行

//parse error info

if (errorStreamReader.ready()) {

StringBuilder buffer = new StringBuilder();

String line;

while ((line = errorStreamReader.readLine()) != null) {

buffer.APPend(line);

}

result.setError(buffer.toString());

}

//parse info

if (inputStreamReader.ready()) {

StringBuilder buffer = new StringBuilder();

String line;

while ((line = inputStreamReader.readLine()) != null) {

buffer.append(line);

}

result.setOutput(buffer.toString());

}

return result;

}

try {

isFinished = true;

process.exitValue();

} catch (IllegalThreadStateException e) {

// process hasn't finished yet

isFinished = false;

Thread.sleep(DEFAULT_INTERVAL);

}

}

} finally {

if (errorStreamReader != null) {

try {

errorStreamReader.close();

} catch (IOException e) {

}

}

if (inputStreamReader != null) {

try {

inputStreamReader.close();

} catch (IOException e) {

}

}

}

}

}

------------------------------------------------------------------------------

package com.example.task_aidl;

public class CommandResult {

public static final int EXIT_VALUE_TIMEOUT=-1;

private String output;

void setOutput(String error) {

output=error;

}

String getOutput(){

return output;

}

int exitValue;

void setExitValue(int value) {

exitValue=value;

}

int getExitValue(){

return exitValue;

}

private String error;

public String getError() {

return error;

}

public void setError(String error) {

this.error = error;

}

}

------------------------------------------------------------

简单的调用: 杀掉一个进程 kill -9 PID

@Override

public String killProc(String PID) throws RemoteException {

// TODO Auto-generated method stub

String cmd = "kill -9 "+PID;

String reply = "";

Log.v("cmd",cmd);

try {

CommandHelper.DEFAULT_TIMEOUT = 5000;

CommandResult result = CommandHelper.exec(cmd);

if (result != null) {

if(result.getError()!=null)

{

Log.v("Output","Error:" + result.getError());

reply = result.getError();

}

if(result.getOutput()!=null)

{

Log.v("Output","Output:" + result.getOutput());

reply = result.getOutput();

}

}

} catch (IOException ex) {

Log.v("Output","IOException:" + ex.getLocalizedMessage());

} catch (InterruptedException ex) {

Log.v("Output","InterruptedException:" + ex.getLocalizedMessage());

}

return reply;

}

123
  • android java如何执行linux命令 相关内容:
  • 阿里云linux服务器数据盘、磁盘扩容教程(案例操
  • 近日服务器的数据盘空间越来越少,于是通过阿里云为linux服务器扩容,但是按照官方的教程没有扩容成功。研究了很长时间特意把需要注意和容易出错的地方给大家标注下,并且把这些实际操作的步骤发出来,以后自己遇到问题方便查看。又能帮助到同样遇到此问题的朋友。首先第一步,在...

  • linux grep命令详解
  • grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。接下来是小编为大家收集的linux grep命令详解,希望能帮到大家。linux grep命令详解Un...

  • Linux命令convert GPT to MBR图解
  • 随着嵌入式系统设备的普及,嵌入式设备的种类越来越多,这就导致了现在还没有一种统一的操作系统能够轻易地运行在任何嵌入式设备平台上。接下来是小编为大家收集的Linux命令convert GPT to MBR图解,希望能帮到大家。Linux命令convert GPT to MBR图解采用GPT分区方式的硬盘...

  • Linux下的GPT分区教程
  • 随着Internet网络的普及,Linux操作系统正在各个方面得到广泛的应用。Linux操作系统在服务器、嵌入式等方面已经取得不俗的成绩,在桌面系统方面,也逐渐受到欢迎。接下来是小编为大家收集的Linux下的GPT分区教程,希望能帮到大家。Linux下的GPT分区教程Linux下的GPT分区,这是...

  • Linux磁盘管理GPT分区教程
  • Linux内核代码量大、逻辑关系复杂,因此对内核中的错误进行追溯和调试一直以来都是一件既耗费时间又耗费精力的事情。接下来是小编为大家收集的 Linux磁盘管理GPT分区教程,希望能帮到大家。 Linux磁盘管理GPT分区教程硬盘分区表扫盲:MBR和GPT表MBR全称为Master Boot Record...

  • linux下串口gps应用
  • 嵌入式系统是计算机技术的一种重要应用形式。从概念上讲,嵌入式系统并不是近来才出现的产品,但随着计算技术和通信技术的迅速发展以及Internet的广泛应用,嵌入式系统却从来没有象现在这样风靡过。接下来是小编为大家收集的linux下串口gps应用,希望能帮到大家。linux下串口gp...

  • linux下GPS设备编程实例
  • Linux系统的裁减的目的就是建立一个在特定的嵌入式环境下与需求相匹配的嵌入式Linux系统。接下来是小编为大家收集的linux下GPS设备编程实例 ,希望能帮到大家。linux下GPS设备编程实例1、GPS设备工作时一直不停地通过串口(或其他的接口)向主机发送具有一定协议格式的数据...

  • Linux下接收处理GPS数据教程
  • Linux的性能、可靠性、灵活性、和开放性,与其支持多微处理器体系结构、硬件设备、图形支持和通信协议相结合,把Linux建成了一个日益发展的操作系统平台。接下来是小编为大家收集的Linux下接收处理GPS数据教程,希望能帮到大家。Linux下接收处理GPS数据教程1,接收数据这个名...

  • 查看更多>>

    linux