Linux向sd发送命令,android 在手机sd 卡中执行linux 命令 和shell 脚本

该博客内容讲述了如何在Android设备开启LTE网络时,通过编写Java代码启动一个进程执行shell脚本,以抓取指定目录(需要root权限)的log。主要涉及ProcessBuilder、shell命令以及权限获取的过程。
摘要由CSDN通过智能技术生成

当时需求是在手机开启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();

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值