通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本

原文地址  http://blog.csdn.net/zmyde2010/article/details/6123987


Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能

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

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

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

 

 

代码:

[java]  view plain copy
  1. public class test extends Activity {  
  2.     TextView text;  
  3.       
  4.     /** Called when the activity is first created. */  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.           
  10.         text = (TextView) findViewById(R.id.text);  
  11.           
  12.         Button btn_ls = (Button) findViewById(R.id.btn_ls);  
  13.         btn_ls.setOnClickListener(new OnClickListener() {  
  14.             public void onClick(View v) {                 
  15.                 do_exec("ls /mnt/sdcard");  
  16.             }             
  17.         });  
  18.         Button btn_cat = (Button) findViewById(R.id.btn_cat);  
  19.         btn_cat.setOnClickListener(new OnClickListener() {  
  20.             public void onClick(View v) {                 
  21.                 do_exec("cat /proc/version");  
  22.             }             
  23.         });          
  24.         Button btn_rm = (Button) findViewById(R.id.btn_rm);  
  25.         btn_rm.setOnClickListener(new OnClickListener() {  
  26.             public void onClick(View v) {                 
  27.                 do_exec("rm /mnt/sdcard/1.jpg");  
  28.             }             
  29.         });      
  30.         Button btn_sh = (Button) findViewById(R.id.btn_sh);  
  31.         btn_sh.setOnClickListener(new OnClickListener() {  
  32.             public void onClick(View v) {                 
  33.                 do_exec("/system/bin/sh /mnt/sdcard/test.sh 123");  
  34.             }             
  35.         });           
  36.     }  
  37.       
  38.     String do_exec(String cmd) {  
  39.         String s = "/n";  
  40.         try {  
  41.             Process p = Runtime.getRuntime().exec(cmd);  
  42.             BufferedReader in = new BufferedReader(  
  43.                                 new InputStreamReader(p.getInputStream()));  
  44.             String line = null;  
  45.             while ((line = in.readLine()) != null) {  
  46.                 s += line + "/n";                 
  47.             }  
  48.         } catch (IOException e) {  
  49.             // TODO Auto-generated catch block  
  50.             e.printStackTrace();  
  51.         }  
  52.         text.setText(s);  
  53.         return cmd;       
  54.     }  
  55. }  

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值