android java如何执行linux命令
android java如何执行linux命令
学习啦在线学习网 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;
}
学习啦在线学习网 android java如何执行linux命令相关文章: