当时需求是在手机开启lte 时启动手机里的一个进程,抓去log 。
public void exec() {
ProcessBuilder pb = new ProcessBuilder("/system/bin/sh");
// java.lang.ProcessBuilder: Creates operating system processes.
pb.directory(new File("/"));// 设置shell的当前目录。
String command1 = "./sdcard/zte/log.sh";
try {
Process proc = pb.start();
// 获取输入流,可以通过它获取SHELL的输出。
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(
proc.getErrorStream()));
// 获取输出流,可以通过它向SHELL发送命令。
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(proc.getOutputStream())), true);
out.println("pwd");
out.println("su root");// 执行这一句时会弹出对话框(以下程序要求授予最高权限...),要求用户确认。
out.println("cd /sdcard/zte/");// 这个目录在系统中要求有root权限才可以访问的。
out.println("ls -l");// 这个命令如果能列出当前安装的APK的数据文件存放目录,就说明我们有了ROOT权限。
out.println("./log.sh");
// proc.waitFor();
String line;
while ((line = in.readLine()) != null) {
System.out.println(line); // 打印输出结果
}
while ((line = err.readLine()) != null) {
System.out.println(line); // 打印错误输出结果
}
in.close();
out.close();
proc.destroy();
} catch (Exception e) {
System.out.println("exception:" + e);
}
}
Runnable GpsBdsrunnable = new Runnable(){
@Override
public void run() {
exec();
}
};