package com.kenshin.hellocommand;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;public class HelloCommand extends Activity {
/** Called when the activity is first created. */
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv01);
try {
execCommand("./data/kenshin/x.sh");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void execCommand(String command) throws IOException { // start the ls command running
//String[] args = new String[]{"sh", "-c", command};
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command); //这句话就是shell与高级语言间的调用
//如果有参数的话可以用另外一个被重载的exec方法 //实际上这样执行时启动了一个子进程,它没有父进程的控制台
//也就看不到输出,所以我们需要用输出流来得到shell执行后的输出
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader); // read the ls output String line = "";
StringBuilder sb = new StringBuilder(line);
while ((line = bufferedreader.readLine()) != null) {
//System.out.println(line);
sb.append(line);
sb.append('\n');
}
tv.setText(sb.toString());
//使用exec执行不会等执行成功以后才返回,它会立即返回
//所以在某些情况下是很要命的(比如复制文件的时候)
//使用wairFor()可以等待命令执行完成以后才返回
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
}
}
catch (InterruptedException e) {
System.err.println(e);
}
}
}以前写的用iptable操作网卡芯片时候的一个测试程序
你要是写好脚本了的话可以用
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);
来执行这个脚本,不过里面有些权限问题,有的命令需要root,而应用程序一般都是没有root权限的,很麻烦,这个和具体的机器有关
解决方案 »
- ListView&SimpleAdapter
- android端获取数据库,服务器上储存的图片怎么做
- 想在Market上发布应用求指教
- 写了关于mp3的小例子,出错了
- LINUX中与Android中的多媒体框架分别有哪些?
- super.onCreate(savedInstanceState);帮忙看一下
- C++Builder如何和网站进行HTTPS的POST和GET?
- vlc for android 播放spydroid视频流
- bootStrap 如何 修改 nvabar 适应性 min-width
- 关于android的Theme和style的问题
- 关于android cdma2000上网的问题
- 周二去文思创新笔试android,希望给点建议!
对,如何在应用程序里面加入root权限啊,这个问题很困扰啊
2。如果楼主有源代码,自己做系统的话,不担心得不到root权限,你可以注册服务去完成root用户的工作。
3。能用shell调用成功,只要封装这些命令就好了,自己写个APK吧,我们也是这么做的。
小弟对android的应用开发属于幼儿园水平,请大侠能不能把这个注册服务的过程讲的详细一点呢,谢谢
服务有两种,一种是native service,在c/c++层运行,可以在init.rc里创建。还有一种是Android service,在系统上层开发,很多组建都用到这种服务,建立过程也有很多资料的,楼主可以查查,如果是一批命令就可以搞定,建议选择第一种,写个sh注册成服务,以root权限去运行,然后用java去调用这个sh。