android sh 指令_从android执行shell命令

public static void sudo(String...strings) {

try{

Process su = Runtime.getRuntime().exec("su");

DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

for (String s : strings) {

outputStream.writeBytes(s+"\n");

outputStream.flush();

}

outputStream.writeBytes("exit\n");

outputStream.flush();

try {

su.waitFor();

} catch (InterruptedException e) {

e.printStackTrace();

}

outputStream.close();

}catch(IOException e){

e.printStackTrace();

}}

(欢迎您为outputStream.close()找到更好的地方)

用法示例:private static void suMkdirs(String path) {

if (!new File(path).isDirectory()) {

sudo("mkdir -p "+path);

}}

更新: 要获得结果(输出到stdout),请使用:public static String sudoForResult(String...strings) {

String res = "";

DataOutputStream outputStream = null;

InputStream response = null;

try{

Process su = Runtime.getRuntime().exec("su");

outputStream = new DataOutputStream(su.getOutputStream());

response = su.getInputStream();

for (String s : strings) {

outputStream.writeBytes(s+"\n");

outputStream.flush();

}

outputStream.writeBytes("exit\n");

outputStream.flush();

try {

su.waitFor();

} catch (InterruptedException e) {

e.printStackTrace();

}

res = readFully(response);

} catch (IOException e){

e.printStackTrace();

} finally {

Closer.closeSilently(outputStream, response);

}

return res;}public static String readFully(InputStream is) throws IOException {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int length = 0;

while ((length = is.read(buffer)) != -1) {

baos.write(buffer, 0, length);

}

return baos.toString("UTF-8");}

静默关闭许多Closeables的实用程序是:public class Closer {// closeAll()public static void closeSilently(Object... xs) {

// Note: on Android API levels prior to 19 Socket does not implement Closeable

for (Object x : xs) {

if (x != null) {

try {

Log.d("closing: "+x);

if (x instanceof Closeable) {

((Closeable)x).close();

} else if (x instanceof Socket) {

((Socket)x).close();

} else if (x instanceof DatagramSocket) {

((DatagramSocket)x).close();

} else {

Log.d("cannot close: "+x);

throw new RuntimeException("cannot close "+x);

}

} catch (Throwable e) {

Log.x(e);

}

}

}}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值