Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本
2016-06-07 14:12
621 查看
Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能
比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用
或者写个脚本,apk中直接调用,省去中间层或者JNI
这个至少效率应该比较高吧
代码:
[java] view plaincopy
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
比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用
或者写个脚本,apk中直接调用,省去中间层或者JNI
这个至少效率应该比较高吧
代码:
[java] view plaincopy
public class test extends Activity { TextView text; /** Called when the activity is first created. */ @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
相关文章推荐
- linux下每次git clone不需输入账号密码的方法
- linux 个人学习笔记(没有干货)
- linux基础命令
- 如何量身打造基于CentOS的产品镜像
- Linux使用yum安装JDK
- vi全局替换方法
- C 读文件 Windows 与 Linux 的差别
- 嵌入式Linux裸机开发(六)——S5PV210时钟系统
- Centos7服务器的初步流程(SSH基本配置)
- Linux中tail与cat的区别
- Linux: hrtimer 用法
- linux内核研究(一)
- LINUX 内核调试基础+编程基础
- Linux之Ganglia源码安装
- linux常用命令
- Linux之read命令使用
- linux下如何部署(执行)java jar包,并关闭此jar的进程
- linux基础(37)--xfs文件系统的备份和恢复--RHEL7.2
- 【Linux】U盘安装Centos6.3遇到的两个重要问题及其解决方法
- Linux驱动学习笔记之一——高精度定时器(1)