windows | Mac os | 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;

}

123
  • android java如何执行linux命令 相关内容:
  • Linux上的一款EPUB阅读软件
  • 如果说用平板电脑看书尚属主流的话,那么在电脑上读书就非常少见了。专注阅读16世纪的书是非常困难的了,没人希望后台蹦出QQ聊天窗口。但是如果你非要在电脑上打开电子书的话,那么你需要一个电子书阅读软件。大多数出版物支持使用EPUB格式的电子书(电子出版物)。幸运的是,linux...

  • 微软正在成为Linux基金会白金会员
  • 近日,微软自豪地宣布,它正在成为Linux基金会白金会员。15年前,其前首席执行官史蒂夫·鲍尔默将Linux形容为癌症。虽然这一举动对于微软来说是有意义的,但在开源世界中,不少人视微软为敌人,并且对微软在开源行业的扩张持不同意见,认为微软加入Linux基金会,可能会让Linux发...

  • Linux下读取默认MAC地址的方法
  • MAC(Media Access Control,介质访问控制)计算机通过它来定义并识别网络设备的位置。在嵌入式linux学习中不可避免也会遇到MAC,本文主要描述了如何通过操作OTP来读取嵌入式linux设备网卡中的MAC地址 一、适用范围 这里主要介绍读取网卡MAC地址的方法,适用于EasyARM-i.MX2...

  • 如何管理和维护RHCS集群
  • 管理和维护RHCS集群是一个非常复杂和繁琐的工作,要维护好一个RHCS集群,必须熟悉RHCS的基本运行原理,在集群管理方面,RHCS提供了两种方式:即Luci图形界面方式和命令行方式,这儿重点讲述在命令行下如何管理RHCS集群。 启动RHCS集群 RHCS集群的核心进程有cman和rgmanager。要启动...

  • Linux下网络故障诊断
  • 由于实现网络服务器的层次结构比较多,因此当网络出现故障时,解决起来比较复杂。下面由我来为大家详细介绍Linux系统中可能出现的一些网络问题,如网卡硬件问题、网络配置问题、驱动程序问题,以及网络层、传输层、应用层问题等。 网卡故障可以分为硬件故障和软件故障,判断硬件...

  • 在Linux上如何管理加密密钥?管理加密密钥的最
  • 存储 SSH 的加密秘钥和记住密码一直是一个让人头疼的问题。但是不幸的是,在当前这个充满了恶意黑客和攻击的世界中,基本的安全预防是必不可少的。对于许多普通用户来说,大多数人只能是记住密码,也可能寻找到一个好程序去存储密码,正如我们提醒这些用户不要在每个网站采用相同...

  • 使用awk的next命令的方法
  • 在awk系列文章中,我们来看一下next 命令 ,它告诉 awk 跳过你所提供的所有剩下的模式和表达式,直接处理下一个输入行。next 命令帮助你阻止运行命令执行过程中多余的步骤。 要明白它是如何工作的, 让我们来分析一下 food_list.txt 它看起来像这样: Food List Items No...

  • Linux下的链接文件详解
  • 几个基本概念 Linux下的链接文件可以分为硬链接(hard link)与软链接(soft link)。要理解它们,必须先要理解几个基本概念。 inode 文件除了纯数据本身之外,还必须包含有对这些纯数据的管理信息,如文件名、访问权限、文件的属主以及该文件的数据所对应的磁盘块等等,这些管理信息称...

  • 发布时间:2016-11-30 16:21:20 查看更多>>

    linux