文档章节

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

s
 sflfqx
发布于 2015/01/08 17:33
字数 299
阅读 926
收藏 2

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

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

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

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

 

 

代码:

[java] view plaincopy

  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/article/details/6123987

s
粉丝 43
博文 202
码字总数 0
作品 0
深圳
高级程序员
私信 提问
Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本

Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能 比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用 或者写个脚本,apk中直接调用,省去中间层或者JNI 这个至少...

长平狐
2012/06/20
4.2K
0
Java执行Runtime.exec(shell)报Cannot allocate memory

在Linux下用java的Runtime.getRuntime().exec(cmd)方式,执行shell脚本时,遇到“Cannot allocate memory”的错误。 网上查询资料整理如下: Cannot allocate memory 在Linux上调试一个比较复...

山哥
2014/06/05
5.1K
1
请教linux下java调用shell实现自动重启的问题

应用场景是实现java程序的远程升级,java程序运行在linux下,是一个后台一直运行的服务。 大概流程如下: 1.java程序判断接收到升级包,调用linux shell脚本来进行升级 Runtime.getRuntime()...

风之刀
2017/06/06
412
0
Android中如何像 360 一样优雅的杀死后台Service而不启动

一、已知的 后台应用程序的方法 这三种方法都可以“杀死”后台应用程序,但是都会自启动,对于前面两种直接使用Android的API就行了,所以就不多介绍了。这里稍微介绍一下 最后一个方法的用法...

wangxigui
2014/06/10
5.8K
16
JAVA调用shell脚本实例

在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到java的process类了。 process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一...

zh119893
2014/07/04
4.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
30分钟前
4
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
32分钟前
5
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部