`
zdshty
  • 浏览: 4602 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Runtime.getRunTime.exec(String command)的使用

 
阅读更多
原文链接 http://blog.csdn.net/zmyde2010/archive/2011/01/08/6123987.aspx
Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本收藏
Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能

比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用

或者写个脚本,apk中直接调用,省去中间层或者JNI

这个至少效率应该比较高吧



代码:

view plaincopy to clipboardprint?
public class test extends Activity {  
    TextView text;  
      
     
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        text = (TextView) findViewById(R.id.text);  
          
        Button btn_ls = (Button) findViewById(R.id.btn_ls);  
        btn_ls.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {                 
                do_exec("ls /mnt/sdcard");  
            }             
        });  
        Button btn_cat = (Button) findViewById(R.id.btn_cat);  
        btn_cat.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {                 
                do_exec("cat /proc/version");  
            }             
        });          
        Button btn_rm = (Button) findViewById(R.id.btn_rm);  
        btn_rm.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {                 
                do_exec("rm /mnt/sdcard/1.jpg");  
            }             
        });      
        Button btn_sh = (Button) findViewById(R.id.btn_sh);  
        btn_sh.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {                 
                do_exec("/system/bin/sh /mnt/sdcard/test.sh 123");  
            }             
        });           
    }  
      
    String do_exec(String cmd) {  
        String s = "\n";  
        try {  
            Process p = Runtime.getRuntime().exec(cmd);  
            BufferedReader in = new BufferedReader(  
                                new InputStreamReader(p.getInputStream()));  
            String line = null;  
            while ((line = in.readLine()) != null) {  
                s += line + "\n";                 
            }  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        text.setText(s);  
        return cmd;       
    }  

public class test extends Activity {
TextView text;

  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        text = (TextView) findViewById(R.id.text);
       
        Button btn_ls = (Button) findViewById(R.id.btn_ls);
        btn_ls.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {   
    do_exec("ls /mnt/sdcard");
   }        
        });
        Button btn_cat = (Button) findViewById(R.id.btn_cat);
        btn_cat.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {   
    do_exec("cat /proc/version");
   }        
        });       
        Button btn_rm = (Button) findViewById(R.id.btn_rm);
        btn_rm.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {   
    do_exec("rm /mnt/sdcard/1.jpg");
   }        
        });   
        Button btn_sh = (Button) findViewById(R.id.btn_sh);
        btn_sh.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {   
    do_exec("/system/bin/sh /mnt/sdcard/test.sh 123");
   }        
        });        
    }
   
    String do_exec(String cmd) {
     String s = "\n";
     try {
   Process p = Runtime.getRuntime().exec(cmd);
   BufferedReader in = new BufferedReader(
        new InputStreamReader(p.getInputStream()));
   String line = null;
   while ((line = in.readLine()) != null) {
    s += line + "\n";   
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
     text.setText(s);
  return cmd;    
    }
}

test.sh:

echo test.sh
echo $1

需要注意:

1. exec不等于console命令

2. exec的输入输出流需要自己处理

3. exec执行时阻塞、非阻塞,返回结果问题

4. 注意权限问题

有个文章讲的比较深入,贴出来研究:

http://blog.csdn.net/zmyde2010/archive/2011/01/12/6130895.aspx

http://kuangbaoxu.javaeye.com/blog/210291



分享到:
评论

相关推荐

    Runtime 执行bat

    Process process = Runtime.getRuntime().exec(command); // 处理子进程的输入、输出和错误流,以避免阻塞 } catch (IOException e) { e.printStackTrace(); } ``` 这里的`"cmd.exe"`是Windows系统的命令解释...

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    i < command.length; i++) { cmdLine.addArgument(command[i]); } DefaultExecutor executor = new DefaultExecutor(); executor.setStreamHandler(new PumpStreamHandler(System.out, System.err)); try { ...

    使用runtime实现linux命令行或shell脚本多次调用

    `Runtime.exec(String command)`方法用于执行单个命令,而如果需要执行包含多个命令的shell脚本,可以使用`Runtime.exec(String[] cmdArray)`,其中cmdArray是一个包含命令及其参数的字符串数组。 下面是一个简单的...

    安卓程序发送linux指令.zip

    如果你的应用需要在后台执行这类操作,但又不希望用户直接在设备上看到shell命令,可以使用`Runtime.getRuntime().exec()`方法将这些命令封装到你的应用内部。 总结来说,Android应用通过`Runtime.getRuntime()....

    Android程序中(APK程序)执行Adb shell 命令

    Process process = Runtime.getRuntime().exec("su -c adb shell command"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = ...

    java修改文件属性

    - 使用`Runtime.getRuntime().exec()`可能会导致安全问题,尤其是在处理用户输入的情况下,因此应当谨慎使用。 - 对于Windows平台,使用`attrib`命令时,确保路径中包含的空格被正确引用,避免命令执行错误。 - 在...

    Java如何调用可执行文件和批处理命令.doc

    Process child = Runtime.getRuntime().exec(command); } catch (IOException e) { // 处理异常 } ``` 在这个例子中,`notepad`是待执行的命令,`Runtime.getRuntime().exec()`会创建一个新的进程来运行该命令。 ...

    android apk获取root权限方法总结

    在 Java 中,我们可以使用 Runtime.getRuntime().exec(String command) 函数来执行 su 命令。这个函数可以访问底层 Linux 下的程序或脚本,使 APK 具有 Root 权限,能够访问系统中需要 Root 权限才能执行的程序或...

    ffmpeg转码截取、截图、合并

    在Java中,你可以通过构建FFmpeg命令字符串,然后使用`Runtime.getRuntime().exec()`方法执行命令。例如,将一个MP4视频转码为WebM格式: ```java String command = "ffmpeg -i input.mp4 -c:v libvpx -crf 30 -b:...

    Java调用Shell命令的方法

    首先,Java通过`Runtime.getRuntime().exec()`方法来执行外部命令,包括Shell命令。这个方法接受一个字符串数组作为参数,其中第一个元素是Shell解释器的路径(通常是`/bin/sh`),第二个元素是`-c`,表示接下来的...

    java系统命令调用

    本文将详细介绍如何使用Java Runtime类中的`getRuntime().exec()`方法来调用系统命令,并提供一些实际应用场景的例子。 ### Java Runtime.getRuntime().exec() `java.lang.Runtime`类提供了运行时系统的表示形式,...

    java执行可执行文件或批处理

    Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C", "my_dir.bat"}); ``` 在Windows平台上,通常还需要指定`cmd.exe /C`作为前缀,以确保批处理文件能够被正确解析和执行。 #### 示例3:...

    java 使用dos命令详解

    其中,`Runtime.getRuntime().exec(command)`是执行外部程序的主要方法,它可以创建一个新进程并返回一个`Process`对象,用于控制该进程或获取其输入/输出流。 ##### 示例1:执行简单的DOS命令 ```java Process ...

    Java调用批处理示例

    Process process = Runtime.getRuntime().exec(command); ``` 这里的`command`参数可以是批处理文件的路径,也可以是其他类型的命令行工具。 #### 三、Java调用批处理示例代码解析 下面是一个简单的Java程序,用于...

    Java备份还原MySQL

    在Java中,我们可以使用`mysqldump`命令行工具,通过`Runtime.getRuntime().exec()`方法来执行系统命令。以下是一个简单的示例: ```java String command = "mysqldump -u username -p password database_name > ...

    java调用播放器

    Process p = Runtime.getRuntime().exec("invalid-command"); } catch (IOException e) { System.out.println("Error executing command: " + e.getMessage()); } ``` #### 三、注意事项 - 使用`Runtime.exec...

    Java调用应用程序和Dos中的命令

    1. **基本形式**:`Process p = Runtime.getRuntime().exec(command);` - `command`:一个包含要执行的命令的字符串。 - 返回值:`Process`对象,用于控制新进程和获取结果。 2. **带参数形式**:`Process p = ...

    通过Java运行一个外部程序

    `Runtime.getRuntime().exec(command)`是关键部分,它调用了`Runtime`类的`exec()`方法来执行指定的命令。如果在执行过程中出现异常,代码会捕获并打印异常信息。 `Runtime.exec()`方法有多个重载版本,用于处理...

    编程语言java批处理.pdf

    特别地,文档中提到了`Runtime.getRuntime().exec(String command)`方法,这是执行系统命令的常用方式。例如: ```java Process process = Runtime.getRuntime().exec("p.exe"); ``` 上述代码执行了名为`p.exe`的...

Global site tag (gtag.js) - Google Analytics